在C语言中使用gets会出现下面的警告,意思是:“警告:‘ gets’函数是危险的,不应该使用。”
warning: the `gets' function is dangerous and should not be used.
这是因为gets没有限制输入字符串的长短,如果输入字符过长,就会发生越界。产生潜在的危险。
为了避免这种警告,在菜鸟教程(https://www.runoob.com/)中搜索 “C库函数-gets”,可以看见如下描述
也就是gets()获取了输入字符,存到给定的地址里面,到换行符时候截止,因此我们可以模拟一个gets()函数,并且加一个条件,如果越界了就停止获取输入字符代码如下。
//获取输入的一行字符存入str1
while(1)
{
scanf("%c",&ch);
if('\n' == ch)
{
str1[i] = '\0';
break;
}
else
{
str1[i] = ch;
i++;
}
if(sizeof(str1)-1 <= i)
{
printf("输入字符数达到上限\n");
break;//防止越界
}
}
编译结果没有任何警告。
这样就可以避免越界,避免警告了,所以在C语言中去掉gets的警告的最好方法就是不使用gets()[狗头][狗头][狗头]。
目前还没有复习到函数,复习到函数之后可以将这段代码放在函数里面,就可以方便的复用了。
完整代码如下:
#include<stdio.h>
int main(void)
{
char ch = 0;
char str1[64] = {0};
char str2[64] = {0};
int i = 0;
int len = 0;
//获取输入的一行字符存入str1,按enter结束,也就是以'\n'为结束符
while(1)
{
scanf("%c",&ch);
if('\n' == ch)
{
str1[i] = '\0'; //获取到'\n'之后,将'\0'存入有效字符串的末尾
break;
}
else
{
str1[i] = ch;
i++;
}
if(sizeof(str1)-1 <= i)
{
printf("输入字符数达到上限\n");
break;//防止越界
}
}
//记录字符串长度,因为 i 是 str1 的字符下标,所以 i+1 是 str1 的字符个数
len = i + 1;
//复制str1到str2
for(i = 0; i < len; i++)
{
str2[i] = str1[i];
}
//打印str1和str1
printf("str1 = %s\n",str1);
printf("str2 = %s\n",str2);
return 0;
}
这段代码的功能是,获取输入字符按enter键结束,复制字符串从str1到str2,最后打印出str1和str2.
标签:字符,ch,str1,C语言,警告,gets,去掉,输入 From: https://blog.csdn.net/weixin_50933109/article/details/145175873