【发布时间】:2011-05-08 04:15:07
【问题描述】:
我想处理配置文件的内容。配置文件可以是任意大小。程序挂起后,当我运行以下代码时,出现总线错误:
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);
我了解到总线错误可能是由缓冲区溢出引起的。我很确定我的char *buffer 出现缓冲区溢出。但是,如何在运行时指定缓冲区的大小?
编辑 - 总线错误是由于我懒于在 fread 调用中硬编码 1 造成的。代码示例已更新以解决此问题,改为使用 sizeof(char)。
【问题讨论】:
-
sizeof(char) == 1是有保证的。 -
@Alok,我就是这么想的,但是当我有 1 时它崩溃了......哦,好吧,无论如何硬编码都很糟糕
-
C 标准保证
sizeof(char)为1。所以在这种情况下硬编码是可以的。