C语言

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

2019-10-19  本文已影响0人  春二一

在字符数组中

#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

上一篇 下一篇

猜你喜欢

热点阅读