我的问题是如何创建一个包含整个文本行的格式字符串,包括嵌入空格?
我有一个缓冲区定义
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数据。我的假设是否正确?
答案 0 :(得分:3)
%s
格式的一部分进行扫描时, scanf
会停留在空格处,而不是作为printf
格式的一部分进行打印时停止。 fprintf(outfile, "%s", buf);
对你来说会很好。
如果您确定buf
字符串是安全的 - 也就是说,它不包含可能导致%
中未定义行为的任何printf
转义,那么您也可以在这种情况下忽略/禁用警告。
答案 1 :(得分:1)
更改
fprintf(outfile, buf);
到
fprintf(outfile, "%s", buf);
它将按预期工作。