【问题标题】:C style regarding fprintf关于 fprintf 的 C 风格
【发布时间】:2013-07-31 16:20:02
【问题描述】:

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

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

【问题讨论】:

  • 这取决于你在写什么以及你想用它做什么。

标签: c file-io coding-style


【解决方案1】:
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");

如果要打印的字符串是可变的,前一个版本是首选版本,如果字符串是常量,硬编码,那么也可以保存使用后者。

使用带有可变字符串的后一个版本的危险在于,邪恶的头脑可能会将转换说明符(%d%s,...)输入到字符串中,这会使代码从堆栈中拉出一些东西不是为了被拉。这会导致市长安全问题。

【讨论】:

  • 是的,因为如果您的变量包含类似 %s 的内容,那么您就被后者搞砸了。
【解决方案2】:

如果你只打印一个字符串,你应该更喜欢使用fputs():

fputs("string to file", file);

它比fprintf() 使用更少的开销,因为它不进行格式化。它没有你展示的fprintf()第二版的坑,因为它没有特别对待%

【讨论】:

  • 我会研究 fputs,并可能建议我们切换到那个。
【解决方案3】:

我更喜欢没有任何格式的版本,比如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多