【发布时间】:2013-07-31 16:20:02
【问题描述】:
如果某个程序有很多行代码可以将字符串打印到文件中,那么以下哪项是首选?我使用首选格式有多重要?
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
【问题讨论】:
-
这取决于你在写什么以及你想用它做什么。
标签: c file-io coding-style
如果某个程序有很多行代码可以将字符串打印到文件中,那么以下哪项是首选?我使用首选格式有多重要?
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
【问题讨论】:
标签: c file-io coding-style
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
如果要打印的字符串是可变的,前一个版本是首选版本,如果字符串是常量,硬编码,那么也可以保存使用后者。
使用带有可变字符串的后一个版本的危险在于,邪恶的头脑可能会将转换说明符(%d,%s,...)输入到字符串中,这会使代码从堆栈中拉出一些东西不是为了被拉。这会导致市长安全问题。
【讨论】:
如果你只打印一个字符串,你应该更喜欢使用fputs():
fputs("string to file", file);
它比fprintf() 使用更少的开销,因为它不进行格式化。它没有你展示的fprintf()第二版的坑,因为它没有特别对待%。
【讨论】:
我更喜欢没有任何格式的版本,比如
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");
【讨论】: