所以我正在从一个文件读入一个缓冲区。默认情况下,此方法不会终止我的字符串。
size_t result;
size_t total = 0;
/* Get the file size */
FILE* pfile;
pfile = fopen(filename, "rb");
fseek(pfile, 0, SEEK_END);
long lfile = ftell(pfile);
rewind(pfile);
char* file_buffer = malloc(sizeof(char) * lfile);
while ((result = fread(file_buffer, 1, lfile, pfile)) > 0)
{
total += result;
}
resp->content_length = lfile;
file_buffer[lfile] = '\0'; //so I try to null terminate it here.
但我写的是大小1无效。我做错了什么?
还有另一种方法可以终止我缓冲区中的内容吗?
答案 0 :(得分:4)
在调用malloc
时,您对字符串长度的计算似乎是错误的。您必须添加1
来代替0
字符。
编辑:BTW,你对sizeof(char)
的使用是......毫无用处。我们定义sizeof
和malloc
只计算char
的大小,因此sizeof(char)
始终为1
。
答案 1 :(得分:1)
file_buffer[lfile]
超出范围,因为file_buffer
只有lfile
元素。这就像说int x[1]; x[1] = 0;
。