gpt4 book ai didi

c - 使用 fgets() 从 stdin 读取

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:32 25 4
gpt4 key购买 nike

我是 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);
}
}

最佳答案

主要错误是将指针 line 传递给函数 read_line(按值)并尝试在该函数中修改它。

read_line 分配内存并实际创建指针值。所以它应该能够改变 mainline 的值:

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 的返回值来修改 mainline。在这种情况下,您根本不需要参数:

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 指出)和备注:

  1. sizeof 不适用于指针(数组衰减为指针)。
  2. malloc 许多字符串 line 但您没有 free 它们。
  3. sizeof(char) 始终为 1。
  4. 有些人(我也是)认为应该避免转换 malloc 的结果。

关于c - 使用 fgets() 从 stdin 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com