porovnanie char polí

Sekcia: Programovanie 18.09.2011 | 17:30
Avatar bosspyroman ubuntu  Používateľ
Ahojte, som v c zaciatocnik a potrebujem pomoc od skusenejsich.
Moj probem je v porovnani dvoch char array - "blabla" a "vstup".
Pole "vstup" sa postupne generuje a ked sa splni podmienka if (data==0x0D)
tak by sa mali tie dve polia porovnat, ak su rovnake tak sa ma vykonat PORTB=1;
Potom sa pole vstup vynuluje a cele sa to opakuje.

Chyba: Nech je vstup akykolvek aj tak sa vykona PORTB=1;

char command;//nepodstatne
char *vstup="";
int pos;
pos=0; //index pola vstup
char blabla="ahoj";

while (1)
{
//tu sa do data sa priradi znak ktory sa v else pripise do vstup
char data=USART_getch();
if (data==0x0D)
{
//porovnanie
if (strcmp(blabla,vstup)==0){PORTB=1;}

//vynulovanie
int i;
for (i=0;i<pos;i++)
{
vstup[i]=0;
}
pos=0;
}
else
{
wait();//nepodstatne
UDR0=data;
command=data;//do command sa priradi jeden znak
vstup[pos]=command;//do vstup sa pripise jeden znak
pos++;
}
}
}


Dufam ze som to zrozumitelne napisal a ze mi niekto pomoze.
    • Re: porovnanie char polí 18.09.2011 | 18:37
      Avatar borg Fedora  Administrátor
      char *vstup = "";
      ...
      for (...)
      vstup[i] = 0;

      ???
      segfault
    • Re: porovnanie char polí 19.09.2011 | 02:30
      _C_   Návštevník
      pozri vykricniky v komente v zdrojovom kode + plus odporucam rychlokvasne zaklady C-cka
      /* nejaky kontrolny retacez */
      #define PRIKAZ_X "blabblab"
      
      int pos;
      pos=0; //index pola vstup 
      
      while (1) 
      { 
      	/* tu sa do data sa priradi znak ktory sa v else pripise do vstup */
      	char data=USART_getch();
      
      	if (data==0x0D) 
      	{ 
      		if (strcmp(PRIKAZ_X, vstup)==0)
      			PORTB=1;
      
      		/* nuluje */
      		int i; 
      		for (i=0;i<pos;i++) 
      			vstup[i]=0; 
      		pos=0;
      		
      		/* !!!!!!!!!!!!!! TUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!!!!
      		 * nechcel si nahodou opustit tento cyklus while(1)?
      		 * tak potom musis dat break, inac pojde znova citat,
      		 * cize sa zacikly do nekonecna
      		 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      		 */
      		break;
      	}
      	else 
      	{ 
      		wait();
      		UDR0=command=data;    /* do command sa priradi jeden znak */
      		vstup[pos++]=command; /* do vstup sa pripise jeden znak   */
      	} 
      }
      • Re: porovnanie char polí 19.09.2011 | 19:31
        bosspyroman   Návštevník
        Vďaka.
        Cyklus ma byt nekonecny, ale to predsa nema vplyv na to co uvadzam ako chybu v prvom prispevku.
        Co poviete na knihu c pro zelenače?