2

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

我定义了一个缓冲区

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 将在第一个空格处停止,并且该数据中有很多空格,这是我需要的。它是按位置格式化的数据。

附录

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

4

2 回答 2

3

%sscanf作为格式的一部分进行扫描时,而不是作为格式的一部分打印时,会停在一个空格处printffprintf(outfile, "%s", buf);对你来说很好。

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

于 2013-06-04T18:27:15.257 回答
1

改变

fprintf(outfile, buf);

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

它会按预期工作。

于 2013-06-04T18:27:36.210 回答