这是我的代码:
printf("Please input a command\n");
char *input;
input = malloc(sizeof(char) * 50);
if(fgets(input, 50, stdin) != NULL) {
if(strcmp(input, "end\0") == 0) {
printf("END");
}
}
出于某种原因,当我输入'结束'时,它不会打印"结束"。这会导致循环条件失败的问题是什么? strcmp(input, "end\0") == 0
当输入指针等于"end\0"
时,应返回0?我也试过了strcmp(input, "end") == 0
,这也不起作用。我该如何解决这个问题?
答案 0 :(得分:1)
fgets
包含换行符。使用strcmp(input, "end\n")
来自文档:
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾为止,以先发生者为准。
换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。
正如评论中所提到的,在使用字符串文字时,您不需要包含\0
。无效终止将自动添加。
答案 1 :(得分:0)
您可以在比较字符串之前删除换行符\ r和\ n:
int length = strlen(input);
if(length>0 && input[length-1]=='\n') {
input[length-1]='\0';
length--;
}
if(length>0 && input[length-1]=='\r') {
input[length-1]='\0';
length--;
}
此代码应该是Windows linux和mac的通用代码。接下来,我在我的示例中使用了不安全的函数,如 strlen 和 strcmp ,还有strncmp只比较指定的字节数。