将'\ 0'添加到非null终止的“字符串”结尾

时间:2013-12-04 22:38:19

标签: c

所以我正在从一个文件读入一个缓冲区。默认情况下,此方法不会终止我的字符串。

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无效。我做错了什么?

还有另一种方法可以终止我缓冲区中的内容吗?

2 个答案:

答案 0 :(得分:4)

在调用malloc时,您对字符串长度的计算似乎是错误的。您必须添加1来代替0字符。

编辑:BTW,你对sizeof(char)的使用是......毫无用处。我们定义sizeofmalloc只计算char的大小,因此sizeof(char)始终为1

答案 1 :(得分:1)

file_buffer[lfile]超出范围,因为file_buffer只有lfile元素。这就像说int x[1]; x[1] = 0;