这是否可以接受?
fprintf(fp,"Just a string");
或
fprintf(fp,stringvariable);
与
fprintf(fp,"%s","Just a string");
对我来说这似乎很混乱,因为字符串变量(或常量)用作格式与输出本身。字符串变量具有特定于格式的内容('%s'等),然后输出将不是预期的。
对于仅字符串输出(无格式化)哪个更好?
fprintf(fp,"%s",stringvariable);
或
fputs(stringvariable,fp);
答案 0 :(得分:2)
如果你不关心大多数现代编译器为该构造生成的警告,那么你可以“知道”字符串变量是“干净的”。的因为强>:
如果您的字符串“偶然”包含转换说明符,则表示您正在调用未定义的行为。
如果您从某个地方读取该字符串,则恶意攻击者可以利用上述第1点到达目的。
使用puts()
或fputs()
通常更好,因为它们可以避免此问题,因此不会生成警告。 (puts()
也会自动'\n'
投掷。)
*puts()
功能也有(略微)更好的性能。 *printf()
,即使只有"%s"
作为格式字符串,仍然必须解析该转换说明符,并计算为其返回值打印的字符数。
感谢用户'rici'和'Grady Player'指出字符计数和编译器警告。看来我的C有点生疏了。 ; - )