2013-07-31 51 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");