【发布时间】:2016-09-11 01:01:20
【问题描述】:
%[^\n] 在 C 中是什么意思?
我在一个程序中看到了它,该程序使用scanf 将多个单词输入到一个字符串变量中。不过我不明白,因为我知道 scanf 不能接受多个单词。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
char line[100];
scanf("%[^\n]",line);
printf("Hello,World\n");
printf("%s",line);
return 0;
}
【问题讨论】:
-
在
scanf()等人的文档中称为扫描集。 -
scanf("%[^\n]",line);的常见问题 1) 它不限制输入,因此在这种情况下,输入文本 100 个字符或更多字符会溢出line[]缓冲区。 2) 如果遇到的 第一个 字符是'\n',则 nothing 关于line[]进行更改,并且函数返回 0。 3)'\n'保留在 @987654331 @。保存自己未来的问题,不要使用scanf("%[^\n]",line);研究并改用fgets()。 -
在 C 中,
%[^\n]没有任何意义。在 scanf 格式化语言(由 C 使用)中,这意味着您的代码已经打开了一个非常大的溢出漏洞利用漏洞。学习 scanf 格式化语言不是学习 C。确实,这样做是学习 C 的障碍。 -
当你“得知 scanf 不能接受多个单词”时,指的是
%s标志。在上面的代码中,您使用的是%[。