String zerteilen + Teilstring vergleichen
-
Hallo!
ich versuche gerade einen String in 2 Teile zu zerteilen, und dann eines der gefundene Elemente mit einem anderen String zu vergleichen.
So habe ich es versucht:
#include <string.h> #include <stdio.h> char string[] = "username: test"; char seps[] = ": "; char *key; char *val; int main() { key = strtok( string, seps ); printf( "key: %s\n", key); val = strtok( NULL, seps ); printf( "val: %s\n", val); if(val == 'username') { printf( "\nOK\n"); } return 0; }
Naja, da kommt der Fehler:
string.c: In function `main': string.c:18: character constant too long string.c:18: warning: comparison between pointer and integer
Ich verstehe 2 Dinge nicht. Wieso Pointer und "Interger"? Was denn für ein Interger, woher denn das?
Und 2., wie kann ich denn den Wert auf den der Pointer zeigt mit einem String vergleichen? AFAIK macht printf() da eine Typenumwandlung, muss ich das auch manuell machen, oder muss ich den Wert erst in eine lokale Variable kopieren um vergleichen zu können?
Und nochwas, ich finde zwar einige gute Anleitungen zu C, aber wo finde ich informationen über die Funktionen(deren Namen, Parameter und Rückgabewerte)? Gibt es da nicht irgendwo sowas wie eine Referenz? Z.B. die String-Funktionen von string.h, wo finde ich was es da so alles gibt? Alles was ich finde sind Tutorials mit Beispielen, das hilft auch oft weiter, aber eine Referenz wäre schon etwas bequemer.
Viele Grüße,
AndreasPS: Kennt jemand von Euch eine gute Anleitung für einen Socket-Server in C? Am besten mit AF_UNIX Sockets, aber das ist nicht so wichtig.
-
'foo' - das ist ein char
"foo" - das ist ein string
und string vergleichen tut mn mit strcmp()
-
Vielen Dank, aber wo findet man solceh Funktionen?
Ich suche auch ein Funktion die das erste, oder das letzte Zeichen eines Strings entfernt.Grüße
Andreas
-
Shade Of Mine schrieb:
'foo' - das ist ein char
"foo" - das ist ein string
und string vergleichen tut mn mit strcmp()
Geht leider noch nicht richtig:
#include <string.h> #include <stdio.h> char string[] = "username: ich"; char seps[] = ": "; char *key; char *val; int main() { key = strtok( string, seps ); printf( "key: %s!\n", key); val = strtok( NULL, seps ); printf( "val: %s!\n", val); if(strcmp(val,"username")) { printf( "OK\n\n"); } return 0; }
Egal was ich für "username" einsetze, die Bedingung scheint immer TRUE zurückzugeben.
Ist übrigens die Verwendung von strtok hier OK? Mit ": " als delimiter, eigentlich ist das ja immer ein char, aber irgendwie scheint es zu gehen.
Oder würdet Ihr das zerteilen anders machen? Ich habe immer Strings mit obigem Schema.Grüße
Andreas
-
Geh mal in den Debugger und Step mal Schritt für Schritt durch deinen Code und schau dir die Variablen Inhalte an.
Was steht in in val zum Zeitpunkt des Vergleichszur Fehlersuche füge mal folgende 2 Zeilen vor dem if ein und prüfe nach ob wie comp ist 0 >0 <0
int comp=-999; comp=strcmp(val,"username");
Vermutlich findest du so den Fehler
Vielen Dank, aber wo findet man solceh Funktionen?
Ich suche auch ein Funktion die das erste, oder das letzte Zeichen eines Strings entfernt.In den Handbüchern, in der Hilfe
Als Handbuch für C Herbert Schildt the Complete reference, das gibts auch in einer deutschen Übersetzung.
Die Funktion gibt es meines Wissens nicht
Das letzte Zeichen Entfernens[(strlen(s)-1)]=0x00;
Um das erste Zeichen zu entfernen must du alle Zeichen eins nach links schieben
int StringLen; char s[]={"TESTSTRING"}; StringLen=strlen(s) for (i=1;i<=Stringlen;i++) s[i-1]=s[i];