正确使用fprintf

时间:2015-11-12 15:26:31

标签: c printf fputs

这是否可以接受?

fprintf(fp,"Just a string");

fprintf(fp,stringvariable);

fprintf(fp,"%s","Just a string");

对我来说这似乎很混乱,因为字符串变量(或常量)用作格式与输出本身。字符串变量具有特定于格式的内容('%s'等),然后输出将不是预期的。

对于仅字符串输出(无格式化)哪个更好?

fprintf(fp,"%s",stringvariable);

fputs(stringvariable,fp);

1 个答案:

答案 0 :(得分:2)

如果你不关心大多数现代编译器为该构造生成的警告,那么你可以“知道”字符串变量是“干净的”。的因为

  1. 如果您的字符串“偶然”包含转换说明符,则表示您正在调用未定义的行为。

  2. 如果您从某个地方读取该字符串,则恶意攻击者可以利用上述第1点到达目的。

  3. 使用puts()fputs() 通常更好,因为它们可以避免此问题,因此不会生成警告。 (puts()也会自动'\n'投掷。)

    *puts()功能也有(略微)更好的性能。 *printf(),即使只有"%s"作为格式字符串,仍然必须解析该转换说明符,并计算为其返回值打印的字符数。

    感谢用户'rici'和'Grady Player'指出字符计数和编译器警告。看来我的C有点生疏了。 ; - )