在C语言中如何去掉gets的警告

在C语言中使用gets会出现下面的警告,意思是:“警告:‘ gets’函数是危险的,不应该使用。”

 warning: the `gets' function is dangerous and should not be used.

这是因为gets没有限制输入字符串的长短,如果输入字符过长,就会发生越界。产生潜在的危险。

为了避免这种警告,在菜鸟教程(https://www.runoob.com/)中搜索 “C库函数-gets”,可以看见如下描述

在C语言中如何去掉gets的警告_第1张图片

也就是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

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.

你可能感兴趣的:(c语言,开发语言)