Forum: PC-Programmierung Char / String vergleichen


von Tom (Gast)


Lesenswert?

Hallo,

ich muss nach einer Texteingabe den geschriebenen Text mit dem im EEPROM 
vergleichen umm wisssen zu können, ob ich erneut im EEPROM abspeichern 
soll, oder ob dort eh schon das gleiche steht.


char SSID[31];
char SSID_saved[31];
const int BUFSIZE = 31;


Gelesen wird
eeprom_read_string(15, SSID_saved, BUFSIZE);

und das Ergebis der Texteingabe wird in SSID gespeichert

Einfach nur mit if(SSID==SSID_saved) unter Arduino funktioniert nicht.

von C-Mentor (Gast)


Lesenswert?

Tom schrieb:
> Einfach nur mit if(SSID==SSID_saved) unter Arduino funktioniert nicht.

Byte fuer Byte vergleichen, memcmp(), ... - C Grundlagenbuch lesen.

von Tom (Gast)


Lesenswert?

Ich hatte das schon mit strcmp versucht, aber das hat nicht geklappt

von DPA (Gast)


Lesenswert?

Hast du auch daran gedacht, dass strcmp und memcmp bei Übereinstimmung 0 
zurückliefern?

von 2⁵ (Gast)


Lesenswert?

Tom schrieb:
> Ich hatte das schon mit strcmp versucht, aber das hat nicht geklappt

Ist denn der String 0 terminiert?

von Joachim B. (jar)


Lesenswert?

Tom schrieb:
> Ich hatte das schon mit strcmp versucht, aber das hat nicht geklappt

warum?
1
  char leer_str[10]={0};
2
  Serial.print(F("jar_str  ")); Serial.println(jar_str);
3
  my_i2c_eeprom_read_string( 0, leer_str ); 
4
  Serial.print(F("leer_str ")); Serial.println(leer_str);
5
  if( !strcmp(leer_str, jar_str) )
6
  { 
7
    Serial.println(F("strcmp OK!"));
8
    Serial.println(F("<-Struct"));
9
  }

bei mir klappt es, dann solltest du noch mal ein C Buch lesen und dich 
mit eeprom read beschäftigen.
hast du im eeprom den String mit 0 terminiert? wenn nicht warum nicht?

von Opti Mist (Gast)


Lesenswert?

Tom schrieb:
> eeprom_read_string(15, SSID_saved, BUFSIZE);

Zunächst müsste mal <SSID_saved> im EEPROM definiert sein.
So vagabundiert es nur im RAM herum.

von Nick M. (Gast)


Lesenswert?

strncmp!

von Joachim B. (jar)


Lesenswert?

Opti Mist schrieb:
> Zunächst müsste mal <SSID_saved> im EEPROM definiert sein.

dann darf beim Programmieren aber auch nicht der ganze Stein inclusive 
EEPROM gelöscht werden, ich hatte deswegen lieber das EEPROM der RTC 
genutzt.
EESAVE könnte man im Atmel ja auch noch irgendwie aktivieren!

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

Klein und Grossbuchstaben gemischt? Die sind bei einem Vergleich mit 
strcmp() anders.

von Joachim B. (jar)


Lesenswert?

PittyJ schrieb:
> Klein und Grossbuchstaben gemischt? Die sind bei einem Vergleich mit
> strcmp() anders.

da hilft toupper() oder tolower()

von Nick M. (Gast)


Lesenswert?

Tom schrieb:
> char SSID[31];
> char SSID_saved[31];
> const int BUFSIZE = 31;

Weitaus intelligenter wäre:
1
#define BUFSIZE 31
2
char SSID[BUFSIZE];
3
char SSID_saved[BUFSIZE];

von Max M. (jens2001)


Lesenswert?

Forum: PC-Programmierung

Tom schrieb:
> unter Arduino funktioniert nicht

FREITAG!!!

(SCNR)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.