gpt4 book ai didi

c - 为什么我的简单 C 程序向标准输出显示垃圾信息?

转载 作者:太空狗 更新时间:2023-10-29 16:50:20 26 4
gpt4 key购买 nike

考虑以下简单的 C 程序,该程序将文件读​​入缓冲区并将该缓冲区显示到控制台:

#include<stdio.h>

main()
{
FILE *file;
char *buffer;
unsigned long fileLen;
//Open file
file = fopen("HelloWorld.txt", "rb");
if (!file)
{
fprintf(stderr, "Unable to open file %s", "HelloWorld.txt");
return;
}
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer=(char *)malloc(fileLen+1);
if (!buffer)
{
fprintf(stderr, "Memory error!");
fclose(file);
return;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, file);
//Send buffer contents to stdout
printf("%s\n",buffer);
fclose(file);
}

它将读取的文件仅包含:

Hello World!

输出是:

Hello World!²²²²▌▌▌▌▌▌▌↔☺

我已经有一段时间没有在 C/C++ 中做任何重要的事情了,但通常我会假设缓冲区分配的比需要的大,但事实似乎并非如此。

fileLen 最终为 12,这是准确的。

我现在在想,我一定是错误地显示了缓冲区,但我不确定我做错了什么。

谁能告诉我我做错了什么?

最佳答案

您需要以 NUL 终止您的字符串。添加

buffer[fileLen] = 0;

打印之前。

关于c - 为什么我的简单 C 程序向标准输出显示垃圾信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260235/

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