gpt4 book ai didi

c++ - 内存管理C

转载 作者:行者123 更新时间:2023-11-30 17:47:44 25 4
gpt4 key购买 nike

我编写了一个函数,使用 C 头文件 stdio.h 返回文件内容(文本或 html)。任何人都可以检查一下并建议我是否有效地完成了内存管理。我将很高兴听到更好的建议来改进我的代码。

char *getFileContent(const char *filePath)
{
//Prepare read file
FILE *pReadFile;
long bufferReadSize;
char *bufferReadFileHtml;
size_t readFileSize;
char readFilePath[50];
sprintf_s(readFilePath, "%s", filePath);
pReadFile = fopen (readFilePath, "rb");

if (pReadFile != NULL)
{
// Get file size.
fseek (pReadFile , 0 , SEEK_END);
bufferReadSize = ftell (pReadFile);
rewind (pReadFile);

// Allocate RAM to contain the whole file:
bufferReadFileHtml = (char*) malloc (sizeof(char) * bufferReadSize);

if (bufferReadFileHtml != NULL)
{
// Copy the file into the buffer:
readFileSize = fread (bufferReadFileHtml, sizeof(char), bufferReadSize, pReadFile);

if (readFileSize == bufferReadSize)
{
return bufferReadFileHtml;
} else {
char errorBuffer[50];
sprintf_s(errorBuffer, "Error! Buffer overflow for file: %s", readFilePath);
}
} else {
char errorBuffer[50];
sprintf_s(errorBuffer, "Error! Insufficient RAM for file: %s", readFilePath);
}

fclose (pReadFile);
free (bufferReadFileHtml);
} else {
char errorBuffer[50];
sprintf_s(errorBuffer, "Error! Unable to open file: %s", readFilePath);
}
}

最佳答案

这看起来像一个 C 程序,而不是一个 C++ 程序。虽然它使用大多数 C++ 编译器进行编译,但它没有利用任何 C++ 功能(例如 new/new[]、delete/delete[]、显式转换、流运算符、字符串、nullptr 等) .)

你的代码几乎看起来像一个安全的C函数,尽管我认为sprintf_s是Microsoft独有的函数,因此可能无法使用GCC、Clang、Intel等进行编译,因为它不是不是标准的一部分。

您的函数还应该始终返回一个值。打开编译器警告以捕获此类内容;它们使调试变得更加容易:)

关于c++ - 内存管理C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18809081/

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