如何使用fprintf打印包含空格的一个文本行

时间:2013-06-04 18:23:18

标签: c printf

我的问题是如何创建一个包含整个文本行的格式字符串,包括嵌入空格?

我有一个缓冲区定义

char buf[380];

当我阅读一行文字时,我确保buf[378] = '\n';和`buf [379] ='\ 0';'

我正在编辑该缓冲区,然后使用fprintf将其写入已打开的文件:

fprintf(outfile, buf);

编译时我收到此警告:

ex_split.c: In function ‘main’:
ex_split.c:65:3: warning: format not a string literal and no format arguments [-Wformat-security]

并且我不太确定如何编写格式字符串以便可以写入所有的buf,因为我记得它会在第一个空格处停止,而且这个数据中有很多空格,我需要它。它是位置格式的数据。

附录

让我重申一下这个问题。我相信%s会导致fprintf停止扫描每行数据中的第一个0x20字符,其中有一个或多个空格和非空格可读ASCII数据。我的假设是否正确?

2 个答案:

答案 0 :(得分:3)

当作为%s格式的一部分进行扫描时,

scanf会停留在空格处,而不是作为printf格式的一部分进行打印时停止。 fprintf(outfile, "%s", buf);对你来说会很好。

如果您确定buf字符串是安全的 - 也就是说,它不包含可能导致%中未定义行为的任​​何printf转义,那么您也可以在这种情况下忽略/禁用警告。

答案 1 :(得分:1)

更改

fprintf(outfile, buf);

fprintf(outfile, "%s", buf);

它将按预期工作。