我有一个函数调用
void copy_data(FILE *fin, FILE *fout, int size) {
char buf[size];
memset(buf, 0, size);
fread(buf, sizeof buf, 1, fin);
fwrite(buf, sizeof buf, 1, fout);
}
malloc在这里是否必要,因为我读到我需要使用malloc时,我不知道编译时的大小,我不知道这里,但我觉得malloc在这里不是必需的。
答案 0 :(得分:4)
C99及更高版本允许可变长度数组(VLA)。 buf
是一个可变长度数组,如果size
很小,您可以使用它。对于大型(堆栈大小限制)阵列,您需要动态分配内存。
请注意,自C11起,VLA成为可选项。
答案 1 :(得分:3)
如果你不打算使用大量内存,那么这不是必需的。与此函数相关的数据将与其他变量一起分配到堆栈中(您将size
类型的char
元素放在堆栈上。不过,您可以考虑take these points。如果你想使用更大的堆,你需要使用malloc()
,然后手动释放内存。
修改强> 正如已经指出的那样,C11标准使可变长度数组可选,因此代码的可移植性问题也随之而来。