正如其他人所说,您无法将字符串与== 进行比较。为了使您的代码正常工作,您需要去除从fgets() 附加的\n 字符。否则,您正在比较:
if (strcmp("mother\n", "mother") == 0) {
除非您删除 \n 字符,否则这始终是错误的。
由于fgets() 在读取用户输入时如果不成功会返回NULL,因此也可以安全地进行检查,如下所示:
if (fgets(string, 20, stdin) == NULL) {
/* Exit program */
}
还可以为fgets()添加一些额外的错误检查,比如检查缓冲区溢出,可以这样检查:
slen = strlen(string);
if (slen > 0) {
if (string[slen-1] == '\n') {
string[slen-1] = '\0';
} else {
/* Exit program */
}
}
经过这些考虑,您的代码可能如下所示:
#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;
}