美文网首页C语言
c语言字符串和字符数组的区别

c语言字符串和字符数组的区别

作者: 春二一 | 来源:发表于2019-10-19 21:39 被阅读0次
    • C语言中没有字符串这种数据类型,可以通过char的数组来替代;
    • 字符串一定是一个char的数组,但char的数组未必是字符串;
    • 数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。

    在字符数组中

    #include<stdio.h>
    int main()
    {   
        char arr1[10] = { 'c', 'h', 'u', 'n' };
        char arr2[4] = { 'c', 'h', 'u', 'n' };
        printf("arr1 content:%s \n", arr1);
        printf("arr2 content:%s \n", arr2);
        printf("arr1 size %d \n", sizeof(arr1));
        printf("arr2 size %d \n", sizeof(arr2));
    
        for (int i = 0; i < 10; i++)
        {
            printf("arr1 content:%c \n", arr1[i]);
        }
        for (int i = 0; i < 10; i++)
        {
            printf("arr2 content:%c \n", arr2[i]);
        }
        
        return 0;
    }
    
    

    我们发现在以string格式在打印字符串数组的时候,
    aar1 打印出来的结果是:chun
    arr2 打印出来的结果是: chun烫烫烫烫chun
    这是因为 %s会接收字符串的结束标志\0之前的所有的字符,而 \0值ASCII中就是数字0,其中arr1中未赋值部分的数组会被编译器 为0,而在arr2中因为只存储了4个字符,没有字符串的结束标志,导致识别不到字符串结束,而出现错误。

    当我们在以char进行打印的时候,我们会发现,arr1中能够打印出10个字符,在后面几个未赋值的字符打印出来的均为空,arr2中能过正常打印出4个字符。


    image.png
    #include<stdio.h>
    
    int main()
    {   
        char arr1[10] = "chuneryi";
        char arr2[9] = "chuneryi";
        printf("arr1 content %s \n", arr1);
        printf("arr1 size %d \n", sizeof(arr1));
        printf("arr2 content %s \n", arr2);
        printf("arr2 size %d \n", sizeof(arr2));
    
        return 0;
    }
    

    将8个字符的字符串chuneryi赋值给一个空间大小为8 的一个数组的时候我发现,提示了一个错误显示字符串占用9个空间而不是8个,这是因为在字符串的实际存储中,会在最后一位存储一个结束标志。因此在控制台中能够正常的输出。

    image.png
    image.png

    友情提示,欢迎批评指正

    在以下博客中 发现了部分基础错误。

    https://blog.csdn.net/weixin_34111790/article/details/92459629

    image.png

    在编译器中我发现,标出来的三个地方均报错


    image.png

    第一个箭头处,数组的长度应该是3
    第二个箭头处,不符合字符串的赋值规则
    第三个箭头处,结合我们上面的分析,数组的长度为4

    相关文章

      网友评论

        本文标题:c语言字符串和字符数组的区别

        本文链接:https://www.haomeiwen.com/subject/ilvnmctx.html