我对 C 相当陌生,如果这是一个愚蠢的问题,我很抱歉,但是当我运行以下代码时:
#include <stdio.h>
int main () {
int i;
int test[10];
char string[81];
for(i = 0; i < 10; i++){
scanf("%d", &test[i]);
}
for(i=0; i < 7; i++){
gets(string);
printf("String was entered\n");
}
}
输入任意 10 位数字,即使我没有在命令窗口中输入字符串,也会打印“字符串已输入”行。谁能解释为什么?有什么办法阻止它发生吗?
Thanks!
使用读入数据后scanf
时,换行符仍然位于输入队列中等待读取。gets
读取换行符并停止(因为它已到达行尾!)
请注意,这是一个坏主意 to use gets
:它无法限制读入缓冲区的字符数,因此,如果您输入的字符多于缓冲区所能容纳的字符数,最终将导致缓冲区溢出,从而导致数据损坏、应用程序崩溃、巨大的安全漏洞和/或任何其他不可预测的结果。作为安全的替代方案,您可以使用fgets
而是用stdin
:
fgets(string, sizeof(string), stdin);
(请注意,您可能希望使用某种符号常量来表示string
这样您就不会在多个地方重复它 - 或使用sizeof(string)
当数组定义可见时。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)