2013-07-31 48 views
2

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

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

它归结为你想用它做你写什么和什么。 – itsols

回答

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

如果要打印的字符串以任何方式前版本是优选的一个,如果字符串常量,硬编码变量,则它也被保存到使用后者。

在变量字符串中使用后一个版本的危险是,一个邪恶的头脑可能会在字符串中输入转换说明符(%d,%s,...),然后这会使代码从堆栈中拉出一些并不意味着被拉。这导致市长安全问题。

+1

是的,因为如果你的变量包含类似%s的东西,你就会被后者搞砸了。 – Shaac

4

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

fputs("string to file", file); 

它使用较少的开销比fprintf(),因为它不会做任何排版。它没有第二个版本fprintf()的凹陷,因为它没有特别对待%

+0

我会研究fputs,并可能建议我们切换到。 –

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