美文网首页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语言- 字符、字符数组

    字符数组和字符串 C语言中没有字符串这种数据类型,C语言中通过char型数组来替代字符串的功能。C语言中的字符串一...

  • C语言字符串的基本使用

    字符串基本使用 可以使用数组来保存字符串 字符串变量和普通的字符数组是有一定区别的 C语言规定:字符串必须以\0 ...

  • C 和 Java 中字符串和字符数组的对比

    1. C 和 Java 中字符串和字符数组的对比 实现原理 在 C 语言中,字符串和字符数组本质上都是一块连续的内...

  • 2018-05-13

    C语言:c语言中没有字符串类型,也没有字符串变量,字符串是放在字符型数组中的。 C语言数变量类型:整型、浮点型、v...

  • 39_字符串类的创建(上)

    关键词: 0. 历史遗留问题 C语言不支持真正意义上的字符串 C语言用字符数组和一组函数实现字符串操作 C语言不支...

  • C++中数组操作符的重载

    字符串类的兼容性 存在的一些历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语...

  • redis sds

    简单动态字符串 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串)...

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

    C语言中没有字符串这种数据类型,可以通过char的数组来替代; 字符串一定是一个char的数组,但char的数组未...

  • C-字符串

    字符串 在 C 语言中,字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。C 编译器会在初始化数组...

  • C语言基础教程之字符串

    C语言字符串 C 语言中,字符串实际上是使用null字符 '' 终止的一维字符数组。因此,一个以 null 结尾的...

网友评论

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

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