vergleicht Ich habe folgende Code in C:C strcmp() gibt positive, wenn String mit char pointer
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *buf;
buf = malloc(sizeof(char) * 512);
while(strcmp(buf, "Exit!") != 0)
{
printf("Enter something:");
fgets(buf, sizeof(char) * 512, stdin);
printf("You entered %s\n", buf);
printf("%d\n", strcmp(buf, "Exit!"));
}
}
Das Verhalten ich will, ist für die while
Schleife zu beenden, wenn der Benutzer den spezifizierten string
eintritt. Von dem, was ich verstehe, kann ich einen char
Zeiger verwenden, um einen string
in C darzustellen. Ich speichere die Benutzereingabe unter Verwendung fgets()
und Vergleiche unter Verwendung der strcmp()
Funktion. Ich habe eine Debug-Anweisung hinzugefügt, die das Ergebnis dieses Vergleichs ausgibt und eine positive Ganzzahl zurückgibt, wenn ich "Exit!" was sollte die while-Schleife beenden.
Könnte jemand erklären, was ich vermisse? Ich glaube, es hat etwas mit einem neuen Zeilenzeichen oder dem C-String Terminator \0
zu tun. Wie bekomme ich die while-Schleife zu beenden, wenn der Benutzer "Exit" eingibt?
'fgets' lesen * und umfasst * den abschließenden' '\ n'' mit jeder Zeile liest. –
Sie sollten die Schleife auch "brechen", wenn 'fgets'' NULL' zurückgibt. Ohne diese Prüfung geht der Code in eine Endlosschleife, wenn der Benutzer die Tastenkombination drückt, die 'EOF' generiert. Diese Tastenkombination ist control-D auf Unix-Systemen und control-Z auf Windows. – user3386109
Auch nach dem 'malloc' sollten Sie die Zeile' buf [0] = '\ 0' haben; 'Das vermeidet die (extrem unwahrscheinliche) Chance, dass der von' malloc' zurückgegebene Puffer den String '' Exit! '' Enthält. ' – user3386109