【发布时间】:2016-11-03 22:03:28
【问题描述】:
我是 C 编程新手,我目前正在尝试使用 fgets() 从标准输入读取一行,但我在内存分配方面遇到了问题,因为我使用 char* 指向字符串 I想读。当我执行该文件时,它会报告分段错误。
这是我正在使用的功能:
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);
}
}
【问题讨论】:
-
char line0; char *line=&line0;现在line指向长度为1 的char缓冲区。如果您的行长度超过1 个字节,您将超出缓冲区。与其只是在编译之前把代码塞进去,不如试着真正了解它在做什么。我会推荐 C 教程、书籍或课程。 -
在这么少的代码行中有这么多错误;-)
-
sizeof(line)是指针的大小,而不是分配内存的大小。 -
1)
fgets(line,sizeof(line),stdin);-->fgets(line, 500, stdin);2)while(read_line(line)){-->while(line = read_line(line)){//需要空闲(行);并打破循环 -
@JonathonReinhart 所以你建议在那里使用 malloc?
标签: c pointers segmentation-fault malloc fgets