我是C编程的新手,我目前正在尝试使用fgets()从stdin读取一行,但是由于我使用的是char *指向我想要阅读的字符串。当我执行文件时,它会报告分段错误。
这是我使用的功能:
char *read_line(char *line){
printf("%s",PROMPT);
line = (char*)malloc(sizeof(char)*500);
fgets(line,sizeof(line),stdin);
printf("%s","pasa el fgets");
return line;
}
我的主要人物:
void main(){
char line0;
char *line=&line0;
while(read_line(line)){
execute_line(line);
}
}
答案 0 :(得分:2)
主要的错误是将指针line
传递给函数read_line
(按值)并尝试在该函数中修改它。
read_line
分配内存并实际创建指针值。因此,它应该能够更改line
中的main
的值:
char *read_line(char **line){
...
*line = malloc(500);
fgets(*line, 500, stdin);
...
return *line;
}
int main(void) {
char *line;
while(read_line(&line)){
...
}
}
或者,您使用read_line
的返回值来修改main
' s line
。在这种情况下,您根本不需要参数:
char *read_line(void) {
char *line;
...
line = malloc(500);
fgets(line, 500, stdin);
...
return line;
}
int main(void) {
char *line;
while(line = read_line()){
...
}
}
其他错误(Jonathon Reinhart指出)和评论:
sizeof
没有"工作" for pointers(数组衰减为指针)。malloc
多个字符串line
,但您没有free
。sizeof(char)
始终为1。malloc
的结果。