c - 当用户不提供输入时,我收到“分段错误:11”。当用户确实提供输入时,它工作正常。我怎样才能解决这个问题?
问题描述
它的一个while (1)
循环不断地询问用户输入直到终止。我希望它询问用户输入,如果在按下回车时没有输入,它应该再次要求输入。
int main(int argc, char* argv[]) {
char input[100];
while (1) {
fgets(input, 40, stdin);
}
}
char input[100];
我也尝试过初始化输入
char *input = (char *)malloc(10*sizeof(char));
但这无济于事。
当用户提供输入时它工作正常。我怎样才能解决这个问题?
解决方案
从我读到的这就是我认为你的程序所做的
#include <stdio.h>
int main(int argc, char* argv[]) {
char input[100];
while (1) {
char* x=fgets(input, 40, stdin);
printf("Hello%c\n",*x);
}
}
来自 fgets 的手册页
返回值
fgets()
成功时返回 s,NULL
出错时或在未读取任何字符时出现文件结尾。
当fgets()
遇到文件结尾时,它会返回一个空指针,如果您尝试跟随它,则会出现分段错误。
你应该做的是检查返回值
#include <stdio.h>
int main(int argc, char* argv[]) {
char input[100];
char* x;
while (x=fgets(input, 40, stdin)) {
printf("Hello%x\n",x);
}
}
请注意,分配的while (x=fgets(...))
目的是