我是C语言编程的新手,目前正在尝试使用fgets()从stdin读取一行,但是由于使用char *指向字符串I,我在内存分配方面遇到了麻烦想读.当我执行该文件时,它报告了分段错误.
I'm new to C programming and I'm currently trying to read a line from stdin using fgets(), but I'm having trouble with memory allocation since I'm using a char* to point to the string I want to read. When I execute the file it reports a segmentation fault.
这是我正在使用的功能:
This is the function I'm using:
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); } }推荐答案
主要错误是将指针line传递给函数read_line(按值)并尝试在该函数中对其进行修改.
The main mistake is to pass the pointer line to the function read_line (by value) and try to modify it in that function.
read_line分配内存并实际创建指针值.因此它应该能够在main中更改line的值:
read_line allocates the memory and actually creates the pointer value. So it should be able to change the value of line in 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的line.在这种情况下,您根本不需要该参数:
Or, you use the return value of read_line in order to modify main's line. In that case you don't need the parameter at all:
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)指出)和备注:
Additional errors (pointed out by Jonathon Reinhart) and remarks:
更多推荐
使用fgets()从stdin读取
发布评论