Wie andere bereits gesagt haben, können Strings nicht mit ==
verglichen werden. Damit Ihr Code funktioniert, müssen Sie das Zeichen \n
von fgets()
entfernen. Ansonsten vergleichen Sie:
if (strcmp("mother\n", "mother") == 0) {
Welche wird immer falsch sein, wenn Sie die \n
Zeichen entfernen.
Da fgets()
kehrt NULL
, wenn nicht erfolgreich, wenn eine Eingabe vom Benutzer zu lesen, ist es auch sicher ist, dass zu überprüfen, wie folgt aus:
if (fgets(string, 20, stdin) == NULL) {
/* Exit program */
}
Sie auch für einige zusätzliche Fehlerprüfung für fgets()
, wie etwa die Überprüfung hinzufügen Pufferüberlauf, der wie folgt überprüft werden kann:
slen = strlen(string);
if (slen > 0) {
if (string[slen-1] == '\n') {
string[slen-1] = '\0';
} else {
/* Exit program */
}
}
Nach diesen Überlegungen kann Ihr Code möglicherweise wie folgt aussehen:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 20
int
main(int argc, char *argv[]) {
char string[BUFFSIZE];
size_t slen;
const char *compare = "mother";
printf("Enter a string: ");
if (fgets(string, BUFFSIZE, stdin) == NULL) {
printf("Error reading string into buffer.\n");
exit(EXIT_FAILURE);
}
slen = strlen(string);
if (slen > 0) {
if (string[slen-1] == '\n') {
string[slen-1] = '\0';
} else {
printf("Buffer overflow. Exceeded buffer size of %d.\n", BUFFSIZE);
exit(EXIT_FAILURE);
}
}
if (!*string) {
printf("No string entered.\n");
exit(EXIT_FAILURE);
}
printf("My string = %s.\n", string);
if (strcmp(string, compare) == 0) {
printf("They are the same.\n");
} else {
printf("They are not the same.\n");
}
return 0;
}
'fgets' vergleicht keine Strings. Für 'strcmp' spielt es keine Rolle, ** wie ** die Strings erstellt werden. Und was ist mit der Dokumentation der Funktionen, verstehst du nicht? – Olaf
Probieren Sie 'printf (" <%s> \ n ", string);' aus, um zu sehen, was Sie mit 'fgets()' lesen. – chux
'strcmp (String," Mutter \ n ")' – BLUEPIXY