我正在制作一个程序,让用户输入一行文本,然后该程序将其打印回给他们。他们以我完成作业的方式-更具体地说,使用char *read_line()
方法-是我必须要做的作业。
当用户输入某些内容(例如他们的姓名)并按Enter键时,它只会显示“细分错误(核心已转储)”,我不知道为什么。
#include <stdio.h>
char *read_line(char *buf, size_t sz) {
if (fgets(buf, sz, stdin) && buf[0] != '\n' )
{
return buf;
}
else
{
return NULL;
}
}
int main(int argc, char** argv) {
char *buf;
char *p;
p = read_line(buf, 1024);
if (p != NULL) {
fputs(p, stdout);
}
return 0;
}
答案 0 :(得分:3)
char *buf;
您已在此处声明了指向char
的指针,但尚未初始化它。因此,它的值就是调用函数时堆栈中的值。
当您尝试访问它指向的内存时,这是一个随机的内存地址,几乎可以肯定是非法的内存访问。
要么使用malloc()
分配一些指向的内存(不要忘记free()
),要么将变量设置为另一个变量的地址。
答案 1 :(得分:1)
最简单的操作是更改以下内容:
char buf[1024];
p = read_line(buf, sizeof(buf));
或者,您可以执行以下操作:
char *buf;
p = read_line(&buf, 1024);
char *read_line(char **buf, size_t sz)
{
*buf = malloc(sz);
...
}
如果使用此方法,请不要忘记free
。