【发布时间】:2018-02-20 02:04:37
【问题描述】:
我正在尝试在 C 中读取 .txt 文件(paragraph.txt 作为输入),当我打印字符串时,它的末尾有垃圾值,例如我的 Visual Studio 的路径或垃圾数据。 99% 的时间都会出现这种情况,但也有一些例外。我不知道它为什么这样做?
void readfile(char **buffer, char *input)
{
FILE *file = fopen(input, "r");
int bytes = filesize(file);
*buffer = (char*)malloc(bytes);
fread(*buffer, bytes, 1, file);
printf("%s\n", *buffer);
fclose(file);
}
我的文件大小函数只返回文件的字节数,我已经检查过它是正确的(返回 4412 字节,这是我拥有的确切字符数)。 函数调用如下:
readfile(&buffer, input);
【问题讨论】:
-
你不是在末尾添加一个零值字节吗?
-
@LeeTaylor 我通过 *buffer[bytes-1] = '\0'; 尝试了这个但是当它试图这样做时它只是使程序崩溃:/
-
第一件事:没有对
file进行空检查,所以你知道文件没有打开,所以你得到了垃圾。 -
@John3136 它仍然显示文本文件,带有 printf。它只是在最后有垃圾。
-
@wrestlerdude c 中的所有字符串都需要以 \0 结尾。您需要比当前多分配一个字节,然后将最后一个字节设置为 0。
标签: c memory-management heap-memory