我在fgets上遇到了段错误 我之前和之后使用printf进行了测试,并且它停止了(在循环之前的main方法中) 具有讽刺意味的是,我有另一个程序可以执行相同的调用并且可以正常工作 这是我的代码:
child(char * input){
shrink(input);
char ** words;
char * word = strsep(&input, " ");
int spaces = 0;
while (word != NULL){
words = realloc(words, ++spaces);
if (words == NULL){ /* memory allocation failed */
exit (1);
}
words[spaces-1] = word;
word = strsep(&input, " ");
}
words = realloc (words, ++spaces);
words[spaces] = NULL;
char str[105];
strcpy(str, "/bin/");
strcat(str, words[1]);
shrink(str);
execvp(str, words);
exit(0);
}
main() {
char * input;
int pid;
printf("$ ");
fgets(input, 100, stdin);
while (strncmp(input, "exit", 4)){ /* while exit command has not been entered */
pid = fork();
if(pid == 0){ /* child process */
child(input);
}
else if(pid < 0){ /* error while doing fork */
exit(1);
}
else{ /* parent process */
wait(0);
}
printf("$ ");
fgets(input, 100, stdin);
}
exit(0);
}
(收缩方法从输入中取出\ n)
答案 0 :(得分:0)
您尚未向input
分配任何内存,即尚未初始化。
它保存的地址是随机的,很可能指向一个不可写的内存区域(例如NULL),这就是存在分段错误的原因。