Ich habe versucht, ein einfaches Programm zu erstellen, das die Mitglieder eines Arrays durchläuft und die Zeichen nach einem bestimmten Zeichen scannt. Ich bin auf ein Problem gestoßen, wo strcmp()
nur am Anfang der Schleife funktioniert. Ich habe Mühe zu verstehen, warum das passiert und jede Hilfe wäre willkommen.strcmp funktioniert nur am Anfang einer Schleife
char *file[3] = {"!x", "!!x", "x!"};
for (int i = 0; i < sizeof(file)/sizeof(file[0]); i++) {
char *line = file[i];
printf("\n");
for (int i = 0; i < strlen(line); i = i + 1) {
char character = line[i];
if (strcmp("!", &character) == 0) {
printf("[YES] %c\n", character);
} else {
printf("[NO] %c\n", character);
}
}
}
Output
[YES] ! [NO] x [YES] ! [NO] ! [NO] x [NO] x [NO] !
Warum verwenden Sie eine ** string ** Vergleichsfunktion, um einzelne ** Zeichen ** zu vergleichen? – Olaf
Sie haben möglicherweise undefiniertes Verhalten: nichts garantiert, dass der Zeiger auf ein Zeichen irgendwo in der Nähe eine Null hat, da es keine Zeichenfolge ist. –
Die Kommentare hier über eine Null-terminate-Zeichenfolge, die erforderlich ist, sind natürlich korrekt. Das Verhalten erscheint immer noch merkwürdig, da wir in diesem Fall wissen, was nach & kommt, da wir den Rest der Zeichen in der Zeichenfolge kennen. Es ist mir nicht klar, warum es sich auf diese spezielle Art und Weise falsch verhält. – Brick