【发布时间】:2021-03-29 18:04:35
【问题描述】:
所以我有这个函数来读取文件,分配内存,并将文件的内容放入缓冲区。我最后总是得到垃圾数据,所以我需要一种方法来终止缓冲区。
#include "GetText.h"
void GetText(const char* filename, char** buffer)
{
FILE* file = fopen(filename,"rb");
long file_lenght;
if(file)
{
fseek(file, 0, SEEK_END);
file_lenght = ftell(file);
rewind(file);
*buffer = (char*) malloc(file_lenght + 1);
fread(*buffer, 1, file_lenght, file);
*buffer[file_lenght] = '\0'; //This line crashed program
fclose(file);
}
}
【问题讨论】:
-
试试
(*buffer)[file_lenght] = '\0';。 -
如果您返回指针
char* GetText(const char* filename) { buffer = (char*) malloc(file_lenght + 1); ... return buffer; },代码将更容易理解(和编写)。不需要双指针。 -
如果您使用 C++ 样式代码而不是 C 样式代码
std::string GetText(...) { ... }会更容易使用std::string将为您完成所有艰苦的工作,尤其是正确释放分配的内存的工作。 -
或者试试
*(buffer + file_length) = '\0' -
最后是
C++或C?