在必要时在 scanf() 中使用 %*c 清除缓冲区是否有任何危险?
例如:
char c;
for (int i = 0; i < 5; i++) {
scanf("%c%*c", &c);
}
或者
char* str;
char c;
int i;
scanf("%s", str);
scanf("%d%*c", &i);
scanf("%c%*c", &c);
是否应该担心缓冲区溢出或其他安全问题? 似乎没有正式的文档说明在 C 中以这种方式在 scanf 中使用星号(编辑这不是真的),所以我很难找出额外的字符究竟发生了什么被输入。 有没有更好的方法来清除C中的scanf缓冲区?
最佳答案
你会更幸运地将你试图完成的任务概念化为“我如何阅读并丢弃用户在我关心的内容之后可能输入的任何垃圾”,这将引导你构建诸如
int c;
while ((c = getchar()) != EOF && c != '\n') ; /* discard till end of line or EOF */
而且,您可以通过首先不使用 scanf
来避免整个问题,即 a good idea for several other reasons 。使用 getline
读取整行,如果有的话,或者fgets
如果不这样做,请手动解析它们。
关于c - 使用 %*c 清除 scanf 缓冲区的危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656134/