2024-11-29 17:42:48
// 理解一下动态分配
// 顺便谨慎使用 %s 读取文件, 也别学用gets
1. 极其不安全, 很容易越界
2. 在有空白字符的情况下, 无法读取整个文件
// 理解一下文件!=字符串, 你无法做到其结尾为0, 中间没有0
#include <stdio.h>
#include <stdlib.h>
unsigned char *Dump_file(const char *path, size_t *fileSizePointer)
{
FILE *fp;
if((fp = fopen(path, "rb")) != NULL)
{
fpos_t position;
if(fgetpos(fp, &position) == 0)
{
size_t fileSize = 0u;
while (getc(fp) != EOF)
fileSize++;
if(fsetpos(fp, &position) == 0)
{
unsigned char *result;
if((result = malloc(fileSize)) != NULL)
{
int temp;
for(size_t index = 0; (temp = getc(fp)) != EOF; index++)
result[index] = temp;
if(fileSizePointer != NULL) *fileSizePointer = fileSize;
fclose(fp);
return result;
}
}
}
fclose(fp);
}
return NULL;
}
请问下,为什么不直接报错,而是超过了数组范围呢?
2024-11-29 11:44:10