彻底弄懂C语言字符串的两种初始赋值的区别

字符串的两种初始赋值如下:


int main()
{
    char str1[] = "absjdv"; //第一种
    char str2[] = { 'a','b','s','j','d','v' }; //第二种
    return 0;
}

第一种:" " 引起来的字符串

编译器会自动在末尾加上'\0','\0'是字符串的结束标志。在这种形式下,字符数组的实际长度加1,因为'\0'也是一个字符。

第二种:{ }里每个字符构成的字符串

这种形式编译器不会在数组的末尾加上一个'\0',如下图:

在打印时,由于字符串的结束标志是'\0',所以使用"%s"格式打印输出字符串时,遇到'\0'就会停止打印输出。

对于" "引起来的字符串,其末尾有字符串结束标志'\0',所以打印输出与输入一致。

但对于{}的字符串形式,就会出现如下图所示情况,原因是该形式的字符串并没有设定结束标志,而空间内存是连续的,在打印完六个字符后,并没有遇到'\0',就会持续打印输出后面内存里的东西,直到遇到'\0'才会停止,就出现了打印输出情况与想象不符的情况。

要解决这个问题很简单,只需要在最后加一个字符'\0'或者0,来标志字符串的结束,就可以正常打印输出啦!


int main()
{
    char str1[] = "absjdv";
    char str2[] = { 'a','b','s','j','d','v' };
    char str3[] = { 'a','b','s','j','d','v' ,'\0'};
    char str4[] = { 'a','b','s','j','d','v' ,0 };

    printf("str1 = %s\n", str1);
    printf("str2 = %s\n", str2);
    printf("str3 = %s\n", str3);
    printf("str4 = %s\n", str4);
    return 0;
}

因为'\0'是字符串的结束标志,所以'\0'在哪,字符串就会停止在那,这个特点可以应用于字符串的截取。


int main()
{
    char str1[] = "absjdv";
    char str2[] = { 'a','b','s','j','d','v' ,'\0'};
    char str3[] = "aghs\0svdh";
    char str4[] = { 'a','b','s','\0','j','d','v' };

    printf("str1 = %s\n", str1);
    printf("str2 = %s\n", str2);
    printf("str3 = %s\n", str3);
    printf("str4 = %s\n", str4);
    return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值