Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符串长度显示不正确_C - Fatal编程技术网

C 字符串长度显示不正确

C 字符串长度显示不正确,c,C,我这里有3个代码 在第一个中,我没有初始化字符串! 斯特伦在ans中显示“3” 在第二个中,我用3个字符初始化了它,仍然是相同的ans“3” 在第三节中,我用4个字符初始化它,输出为“4” 抱歉,伙计们,若这太明显了,但我是新来的,所以很困惑为什么在第一个代码的输出中显示“3” //1st #include<stdio.h> #include<string.h> int main() { char y[20]; printf("%d&quo

我这里有3个代码

  • 在第一个中,我没有初始化字符串! 斯特伦在ans中显示“3”

  • 在第二个中,我用3个字符初始化了它,仍然是相同的ans“3”

  • 在第三节中,我用4个字符初始化它,输出为“4”

  • 抱歉,伙计们,若这太明显了,但我是新来的,所以很困惑为什么在第一个代码的输出中显示“3”

    //1st
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char y[20];
        printf("%d",strlen(y));
        return 0;
    }
    
    //2nd
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char y[20]="yas";
        printf("%d",strlen(y));
        return 0;
    }
    //3rd
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char y[20]="asds";
        printf("%d",strlen(y));
        return 0;
    }
    
    //1st
    #包括
    #包括
    int main()
    {
    chary[20];
    printf(“%d”,strlen(y));
    返回0;
    }
    //第二
    #包括
    #包括
    int main()
    {
    char y[20]=“yas”;
    printf(“%d”,strlen(y));
    返回0;
    }
    //第三
    #包括
    #包括
    int main()
    {
    字符y[20]=“asds”;
    printf(“%d”,strlen(y));
    返回0;
    }
    
    您在1)案例中看到的是未定义的行为。 因为
    y
    未初始化

    还返回
    size\u t
    ,打印其返回值的正确格式为:


    printf(“strlen(y)=(%zu)\n”,strlen(y))

    遇到“\0”时,strlen的功能将停止

    在第一个代码中,char y[20]未初始化。数组中的值可以是堆栈中剩余的任何值。碰巧是y[3]='\0'


    所以strlen(y)可以是其他环境中的任何值

    也许你是对的,但我在在线编译器上尝试过,它们都给出相同的ans,但当我将“20”更改为“100”时,它给出了“4”作为输出,当我将其更改为“10”时,答案是“0”,这是模式吗?我是新来的,如果我用愚蠢的问题给你带来困难,我很抱歉!感谢您的帮助,
    sizeof()
    函数也会返回
    size\t
    sizeof
    不是函数,而是运算符。当
    type
    只是一个数据类型时,您会看到很多
    sizeof(type)
    ,这是必需的表单。如果需要对象的大小,只需使用
    sizeof object
    。无论如何,结果是类型
    size\u t
    ,对。(阅读本标准会有所帮助。)