我知道有关于它的数百个主题,但我需要再问一次 . 我有以下代码:
char *str;
while(fgets(&str,50,stdin) != NULL && &str != EOF) {
printf(&str);
}
printf("Test");
我想在我的代码中读几行并用它们做些什么 . 在那个例子中,它只是打印 . 我想结束,当有一个EOF然后在while循环后做其他的东西 . 不幸的是,在我使用CMD-D(mac / CLion上的EOF)的那一刻,完整的程序终止了,无论后面是什么,所以输出上没有“测试”了 .
有谁知道发生了什么?还要注意,我需要它作为char指针,因为我想稍后使用它 .
2 回答
您的代码应如下所示:
在您的代码中,
str
只是一个指向未分配内存的指针 . 然后你要求fgets()存储str
它读取的内容(但是在哪里存储它,因为没有为str
分配内存?!) . 这会导致未定义的行为,必须修复 .一个简单的解决方案是使
str
成为一个字符数组 .您的代码中的
EOF
表示您没有阅读该函数的手册,该手册指出:这意味着我们不需要额外的检查 .
把所有东西放在一起:
它逐行读取文件,然后打印每一行 .
有用的链接:Removing trailing newline character from fgets() input .
PS:您可以使用
fgets()
sizeof(str)
的第二个参数,而不是50(数组的大小),但是当str
是一个实际指向存储器存储的另一个位置的指针时(例如另一个),这将不起作用数组) .