A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

天堂月夜

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

刚开始学C语言基础,最先接触的就是scanf和printf函数,后来练习时候发现scanf输入数字和字母时候如果字母前有空格,接收不到。一直想找到解决的办法,后来学到字符串数组时候,又接触到gets函数,但是编译运行之后会有警告。warning: this program uses gets(), which is unsafe.
//scanf输入
// 在程序中字符串是使用频率非常大的一种数据
    // 因此常常需要根据条件修改字符串的内容
    // 输入字符串
    // scanf("格式字符串", 地址);
    // 将用户输入的数据与格式化字符串进行匹配, 将匹配到的数据赋值给地址所在的内存
    //  使用 %s 作为字符串的格式, 使用数组来存储字符串
    // 使用语一般输入数据的方法一样, 但是有安全隐
int main(int argc, const char * argv[]) {
   char str1[4];
   scanf("%s", str1);
   printf("%s\n", str1);

// 1)如果此时输入字符1234567890越界,则打印出来结果为1234567890
// 2)如果此时输入字符abc  d,中间夹杂空格,则打印出来结果是abc
    // gets() 函数
// 语法: gets(数组)
    char str[5];
    gets(str);
printf("%s\n", str);

输入1234567890
输出warning: this program uses gets(), which is unsafe.
1234567890

安全输入,自己写一个函数getstring()

void getString(char str[], int length) {
    // 定义一个函数,返回到数组
    int i = 0;
    while (1) {
        if (i == length - 1) {
            str[i] = '\0';
            // 1
            while(getchar() != '\n') ; // 清空缓存的数据
            // 2
            // while (1) {
            //         char c = getchar();
            //         if(c == '\n') break;
            // }
            break;
        }
        char c = getchar(); // 从缓存中获取一个字符, 注意缓存中也许还有很多字符
        if (c == '\n') {
            str[i] = '\0';
            break;
        }
        // 不为输入结束
        str[i] = c;
        i++;
    }
}
这样就写出了一个安全输入字符的函数,然后调用即可

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马