读取未知大小的文件内容

Mad*_*r X 3 c stdio

我想处理配置文件的内容.配置文件可以是任何大小.程序挂起后,当我运行以下代码时,我收到一个总线错误:

FILE *fp;
struct stat st;
char *buffer;

fp = fopen(CONFIG_FILE, "r");
if (fp == NULL) {
    // error handling and cleanup omitted for brevity
}

fstat(fileno(fp), &st);
fread(buffer, sizeof(char), st.st_size, fp);
fprintf(stderr, "%s\n", *buffer);
fclose(fp);
Run Code Online (Sandbox Code Playgroud)

我已经读过缓冲区溢出可能导致总线错误.我很确定我的缓冲区溢出了char *buffer.但是,如何在运行时指定缓冲区的大小?

编辑 - 总线错误是由于我1在长途电话中的硬编码懒惰造成的.代码示例已更新以解决此问题,sizeof(char)而是使用.

Car*_*rum 6

使用malloc(3).放:

buffer = malloc(st.st_size);
Run Code Online (Sandbox Code Playgroud)

在你打电话之前fread().完成后不要忘记自由buffer!

您可能也不想*bufferprintf()通话中使用.如果你打算尝试像这样打印整个文件,你需要确保分配一个额外的字节来空终止你的字符串.