我是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);
}
}
1 回答
主要的错误是将指针
line
传递给函数read_line
(按值)并尝试在该函数中修改它 .read_line
分配内存并实际创建指针值 . 所以它应该能够在main
中更改line
的值:或者,使用
read_line
的返回值来修改main
的line
. 在这种情况下,您根本不需要参数:其他错误(Jonathon Reinhart指出)和评论:
sizeof
对于指针不是"work"(数组衰减为指针) .你
malloc
许多字符串line
但你没有free
他们 .sizeof(char)
始终为1 .有些人(我也是)认为应该避免投射
malloc
的结果 .