如果某個程序有許多將字符串打印到文件的代碼行,那麼以下哪一項是首選的?我使用首選格式有多重要?關於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