如果我明确声明缓冲区大小,我似乎只能将文件读入内存。这工作将文件读入内存?
#include <stdio.h>
int main(){
FILE *fp = fopen("test.log", "rb");
char buffer[37];
fread(buffer, 1, 36, fp);
printf("%s", buffer);
}
这将增加垃圾到输出
#include <stdio.h>
int main(){
FILE *fp = fopen("test.log", "rb");
fseek(fp, 0, SEEK_END);
long siz = ftell(fp);
rewind(fp);
char buffer[siz + 1];
fread(buffer, 1, siz, fp);
printf("%s", buffer);
}
概念错误。在C中,任何数组的声明都应该指出在编译时的大小。如果要动态创建数组,请使用'malloc' – texasbruce 2012-08-04 17:43:58
以二进制模式打开文件,但将其打印为字符串。这只适用于数据确实是文本的情况。另外,您不会终止缓冲区。请记住,在创建数组时它不会自动清零。 – 2012-08-04 17:47:31
也许无关紧要,因为它不能确定数据的实际内容,你不是'NUL'终止你的字符串。尝试在字符数组的末尾添加'\ 0'并查看它打印出来的内容。 – 2012-08-04 17:50:40