C语言文件输入超过数组长度

高手帮我分析下,C语言文件输入超过数组长度
最新回答
爱在天气晴

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

你将字符数组4改为40或者140