如果某个程序有许多将字符串打印到文件的代码行,那么以下哪一项是首选的?我使用首选格式有多重要?关于fprintf的C风格
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
如果某个程序有许多将字符串打印到文件的代码行,那么以下哪一项是首选的?我使用首选格式有多重要?关于fprintf的C风格
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
fprintf(file, "%s", "string to file");
fprintf(file, "string to file");
如果要打印的字符串以任何方式前版本是优选的一个,如果字符串常量,硬编码变量,则它也被保存到使用后者。
在变量字符串中使用后一个版本的危险是,一个邪恶的头脑可能会在字符串中输入转换说明符(%d
,%s
,...),然后这会使代码从堆栈中拉出一些并不意味着被拉。这导致市长安全问题。
是的,因为如果你的变量包含类似%s的东西,你就会被后者搞砸了。 – Shaac
如果只打印字符串,你应该更喜欢使用fputs()
:
fputs("string to file", file);
它使用较少的开销比fprintf()
,因为它不会做任何排版。它没有第二个版本fprintf()
的凹陷,因为它没有特别对待%
。
我会研究fputs,并可能建议我们切换到。 –
我宁愿一些版本不带任何格式,像
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");
它归结为你想用它做你写什么和什么。 – itsols