确定内容长度并附加'\ 0'
printf("%d", fp_len);
printf("%d", len);
fp_len打印:400,而len打印:1
text[fp_len] = '\0';
我的理解是错的:
text[len] = '\0';
这是正确的:
$('#fileToUpload').change(function(){
var file = this.files;
filepreview(file);
});
function filepreview(files)
{
var length = files.length;
for(var i=0 ; i<length ; i++)
{
var file = files[i];
var reader = new FileReader();
reader.addEventListener("load",function(e){
$('#pic'+i+'').attr('src' , ''+e.target.result+'');
});
reader.readAsDataURL(file);
}
}
但如果“len”正在打印1 ..
不会'\ 0'被添加到数组的第二个位置?
答案 0 :(得分:2)
调用fread(text, fp_len, 1, fp)
要求读取一个大小为fp_len
的元素,因此在成功执行结果后1
(读取的元素数)或者如果读取失败则可以是0
如果要计算从文件中读取的字节数(字符数),可以更改参数的位置,例如
fread(text, 1, fp_len, fp)
有关更多信息,请参阅references
答案 1 :(得分:1)
size_t fread(void * restrict ptr,size_t size,size_t nmemb,FILE * restrict stream);
正如其他人所说,fread
返回1 - 读取的元素数量,每个元素的大小为size
或400.
以正确的顺序放置增补。
// size_t len = fread(text, fp_len, 1, fp);
size_t len = fread(text, 1, fp_len, fp);
最好在这里避免像1这样的幻数。相反,请使用text[]
元素的大小。
size_t len = fread(text, sizeof *text, fp_len, fp);
此外,代码缺少错误检查和printf()
说明符的正确性。
if (fp == NULL) Handle_Error("fopen");
if (fseek(fp, 0, SEEK_END)) Handle_Error("fseek");
long fp_len = ftell(fp);
if (fp_len == -1) Handle_Error("ftell");
if (fp_len < 0 || fp_len >= SIZE_MAX) Handle_Error("long to size_t");
char *text = malloc(sizeof *text * (fp_len + 1));
if (text == NULL) Handle_Error("malloc");
size_t len = fread(text, 1, fp_len, fp);
if (len == 0 && fp_len > 0) Handle_Error("fread");
text[len] = '\0';
printf("%ld", fp_len); // note specifiers
printf("%zu", len);
答案 2 :(得分:0)
根据你需要写的manual page
fread(text, 1, fp_len, fp);