如果某个程序有多行代码将字符串打印到文件中,那么以下哪项是首选?我使用首选格式有多重要?
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
答案 0 :(得分:4)
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
如果要打印的字符串以任何方式变量,则前一版本是首选版本,如果字符串是常量,硬编码,那么它也可以保存以使用后者。
将后一版本与变量字符串一起使用的危险在于,一个邪恶的头脑可能会将转换说明符(%d
,%s
,...)输入到字符串中,然后这会使代码拉出某些内容从堆栈中不打算拉。这导致了市长安全问题。
答案 1 :(得分:4)
如果您只打印字符串,则应优先使用fputs()
:
fputs("string to file", file);
它使用的开销小于fprintf()
,因为它没有格式化。它没有您显示的fprintf()
的第二个版本的凹陷,因为它不会特别处理%
。
答案 2 :(得分:0)
我更喜欢没有任何格式的版本,比如
int fprint(FILE* file, char* s) {
size_t ch_size = sizeof(char);
size_t str_size = (strlen(s) + 1) * ch_size;
return fwrite(s , ch_size, str_size, file);
}
fprint(file, "string to file");