Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Nearduinista píše:Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Pokud použiji příkaz na porovnávání řetězců strcmp, tak když nechám volatile, překladač dá varování: passing argument 1 of ‘strncmp’ discards qualifiers from pointer target type. A nefunguje to stejně
Nearduinista píše:Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Aký reťazec posielaš ak taký "on\r\n" pripadne "on\n\r" tak ? ten poslední znak ty prepíše 'o' na '\0'. skús poslať len "on\r" pripadne "on\n"
Ak posielaš len "on" tak tam chyba ukončovači znak "\0" pre funkciu strcmp()
a dávaj pozor niektoré terminály ty môžu znaky "\r\n" vkladať automaticky
Například takhle už to funguje v pohodě ale proč? Tady defakto jen počkám až se zpráva nahraje celá . A potom vyhodnotím řetězec zda je stejný nebo není. To mě vrtá už několik dnů hlavou.
neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Naposledy upravil(a) Dumitru dne 08 kvě 2024, 21:40, celkem upraveno 1 x.
V skompilovanom kod mozno ani ziadny strcmp nebude, pretoze kompilator usudi, ze dana podmienka sa nemoze nikdy splnit a pri optimalizacii ho odstrani.
char zprava[16]; int main() { while (1) { if (strcmp(zprava,"on") == 0) printf("AAAAAA\n"); } } $ cc test.c -o test $ strings test | grep strcmp strcmp strcmp@GLIBC_2.0 $ cc test.c -O2 -o test $ strings test | grep strcmp $
Dumitru píše:neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Tož mě to taky napadlo, tak jsem se to pro zkoušku jal vyřešit takhle. A furt to nejede hm...
Dumitru píše:neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Tož mě to taky napadlo, tak jsem se to pro zkoušku jal vyřešit takhle. A furt to nejede hm...