Schwierigkeiten mit strstr()
-
Hallo zusammen, habe ein kleines Problem mit der Suche eines Strings innerhalb eines anderen.
folgender Aufbau:
//**************12 stellige ID welche im "rxbuf" Array ist, wird gespeichert in //drei Variablen if((different_ID) && (strstr(rxbuf,"SYNC")) && (timer_>=10)) { uart_puts("\r\n31\r\n"); timer_=0; for(i=1;i<13;i++) //speicher Ziffern von der 1 bis 12 Stelle aus dem array { x=((unsigned int)rxbuf[i]-48);//konvertiere ins int if(i<5)//vier Ziffern hier { four_signs_number_1=four_signs_number_1*10+x; } else if(i>=5 && i<9)//weitere 4 hier { four_signs_number_2=four_signs_number_2*10+x; } else//die letzten vier hier { four_signs_number_3=four_signs_number_3*10+x; } } ID_cnt++; //erhöhe den counter, beim start ID_cnt=0 if(ID_cnt==1) { eeprom_write_byte(&I_door_ID_eeprom,0xA3); I_door_ID_1_1=four_signs_number_1; I_door_ID_1_2=four_signs_number_2; I_door_ID_1_3=four_signs_number_3; eeprom_write_word(&I_door_ID_1_1_eeprom,I_door_ID_1_1);// ins EEPROM speichern eeprom_write_word(&I_door_ID_1_2_eeprom,I_door_ID_1_2); eeprom_write_word(&I_door_ID_1_3_eeprom,I_door_ID_1_3); eeprom_write_byte(&I_door_number_of_IDs_in_eeprom,ID_cnt); uart_puts("\r\n33\r\n"); //Ausgabe auf den Bildschirm "33" } //***diese 12 Variable soll ausgelesen und überprüft werden ob diese im Array(rxbuf) vorkommt, was ich mit srtsrt() machen wollte if(ID_cnt!=0) //if any IDs are registered { sprintf(test_string_1,"%04d",I_door_ID_1_1); sprintf(test_string_2,"%04d",I_door_ID_1_2); sprintf(test_string_3,"%04d",I_door_ID_1_3); // EEPROM ID in String // umwandeln sprintf(s,"s_%04d%04d%04d\rn",I_door_ID_1_1,I_door_ID_1_2,I_door_ID_1_3); uart_puts(s); //Ausgabe des Strings "s" ist "s_123456789101" sprintf(my_ID_register,"%s%s%s\r\n",test_string_1,test_string_2,test_string_3); uart_puts(my_ID_register);//Ausgabe des Strings "my_I.." ist "123456789101" if(strstr(rxbuf,my_ID_register))//beim Vergleich springe ich in die else //Bedingung, k.a. warum??? { uart_puts("\r\nID found 01! ! !\r\n");//Ausgabe auf dem // Bildschirm different_ID=0; } else { different_ID=1; uart_puts("\r\nits not ID 01! ! !\r\n");//Ausgabe auf dem // Bildschirm } }wie erwähnt kann ich die fest vorgegebene ID nicht in den "rxbuf" array finden, wobei rxbuf immer den Wert rxbuf=X123456789101 hat. Auf dem Bildschirm bekomme ich in "my_ID_register" und "s" String die selbe ID angezeigt, aber der Vergleich schlägt fehl. Die Frage ist jetzt , Wieso?
Vllt. kann ja einer nen Tipp geben.Gruß
-
Versuch doch mal sicherheitshalber
strstr(rxbuf, "123456789101");
-
habe jetzt eine kleine Schleife geschrieben und es funktioniert nun. Woran es lag keine Ahnung.
if(ID_cnt!=0) { x=0; sprintf(test_string_1,"%04d",I_door_ID_3_1); sprintf(test_string_2,"%04d",I_door_ID_3_2); sprintf(test_string_3,"%04d",I_door_ID_3_3); sprintf(my_ID_register,"%s%s%s",test_string_1,test_string_2,test_string_3); for(i=1;i<13;i++) if(rxbuf[i]==my_ID_register[i-1] && x==0) continue; else x=1; if(x==0) { uart_puts("\r\nID found 03! ! !\r\n"); different_ID=0; } else { different_ID=1; uart_puts("\r\nits not ID 03! ! !\r\n"); } }
-
Ich weiss zwar nicht warum du hier nun wieder 3 einzelne sprintf benutzt, aber einfacher wäre es schon so:
sprintf(my_ID_register,"%04d%04d%04d",I_door_ID_3_1,I_door_ID_3_2,I_door_ID_3_3); if( memcmp( rxbuf+1, my_ID_register, 12 ) ) puts("Nicht gefunden"); else puts("gefunden");
-
-
Hallo nochmals, hätte da eine weitere Frage.
Was ist wenn ich z.B. einen String mit den Werten eines zweidimensionalem Array vergleichen möchte. D.h. anstatt my_ID_register=[12] hätte ich my_ID_register[12][3] also drei einträge mit jeweils 12 Ziffern. Kann ich diese auch direkt vergleichen, oder muss ich aufjedenfall hier eine for Schleife einsetzen.Gruß
-
Schleife ist nötig.
-
snoopy9134 schrieb:
Hallo nochmals, hätte da eine weitere Frage.
Was ist wenn ich z.B. einen String mit den Werten eines zweidimensionalem Array vergleichen möchte. D.h. anstatt my_ID_register=[12] hätte ich my_ID_register[12][3] also drei einträge mit jeweils 12 Ziffern. Kann ich diese auch direkt vergleichen, oder muss ich aufjedenfall hier eine for Schleife einsetzen.Gruß
frage, ist my_ID_register sowas wie eine struct? dann ist alles falsch diese wollen nicht mit memcmp() verglichen werden. wenn man eh schon den memcmp() weg eingeschlagen hat braucht man auch keine schleife

-
Hallo,
nein es ist kein Struct, ist ein zweidimensionales Array. Vorher hatte ich nur eine ID drin stehen (eindimensionales Array), jetzt möchte ich mehrere IDs abspeichern und später überprüfen ob diese in dem zweidimensionalen my_ID_register Array vorhanden ist.