关于fprintf的C风格

时间:2013-07-31 16:20:02

标签: c file-io coding-style

如果某个程序有多行代码将字符串打印到文件中,那么以下哪项是首选?我使用首选格式有多重要?

fprintf(file, "%s", "string to file");
fprintf(file, "string to file");

3 个答案:

答案 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");