• 由scanf引发的思考


    #include <stdio.h>
    main()
    {
    int n=5;
    char c[5];
    for(int i=0; i <n; i++){
    scanf("%c",&c[i]);
    fflush(stdin);}
    printf(c);//为什么输出会多出奇怪的字符
    return 0;
    }

    这是我最初的问题代码,是啊,为什么要输出一些奇怪的字符呢?因为我的数组没有结束字符'/0',就是这个原因!

    对于字符串我们平常是这样用的c[5]={"iwai"};或者是c[5]="iwai";其中已将包含'/0'赋给了c[5],以前虽然知道,但是没注意
    现在对比这个问题就很有代表性了,所以导致了上面输出的错误情况!
    所以上述要将a[4]赋值'/0'才是正确的!
    哎,搞的中午午觉都没怎么睡,收工睡觉!

    至于为什么就算我没有结尾符号它也只是输出有限的无用数据,也没有因为没有结尾二结不了尾,这个是因为什呢机制呢?目前还不清楚,希望网友的帮助!

    输出就是asdfg烫?
    为什么计算机输出“烫”,而且我发现我电脑了很多区域都是“烫”

    其实是这样的

    内存里面会有存放'/0'的地方,打印的时,什么时候遇到内存中有'/0',就在那里结束,所以后面的字符长度是随机的

    未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个“字符串”被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个“烫”字

    哎,搞的中午午觉都没怎么睡,收工睡觉!

  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/jackhub/p/3147258.html
Copyright © 2020-2023  润新知