c 语言字符数组初始化,关于c 语言字符数组的赋值

41f2c008fe9df7ceef08fe47105f0c42.png

changrui0608

首先,在语法上,三句都是正确的,但按照C语言中字符串的用法,第二句是错误的,可能导致无法预料的错误结果。在C语言中,我们一般说的字符串,其实就是字符数组(区别于C++,Java等语言),而用类似char a[]这样的方式,定义的就是一个字符数组,所以是正确的。 C语言中我们这么规定字符串:从字符数组下标0开始存储字符串,在字符串结束后,下一个位置用字符'\0'作为结束标记,也就是说,数组长度应该是字符串长度+1。下面解析一下这个程序:#include 

#include 

#include 

int main()

{

char a[] = "abc";   // 定义一个字符数组,字符串长度为3,实际数组长度为4

// a[]没写数字的情况下编译器根据后边的"abc"推断出,字符串长度为3,数组长度为4

// 所以等效于 char a[4] = "abc"

char b[3] = "xyz";    // 手动制定数组长度为3,内容为"xyz",所以结尾没有'\0'

// 因为正好放得下"xyz",即使没有'\0',也没有错误或警告

// 但不符合C语言中字符串定义,可能导致错误!

char c[10] = "123456";    // 长度为10,只用了6+1=7个位置,稍浪费一些内存,但不会出错。

char d[3] = "ABCDEF";  // 长度真正超出范围,能编译,会有warning

printf("字符串a的长度是:%d, 内容是:%s \n", strlen(a), a);

printf("字符串b的长度是:%d, 内容是:%s \n", strlen(b), b);

printf("字符串c的长度是:%d, 内容是:%s \n", strlen(c), c);

printf("字符串d的长度是:%d, 内容是:%s \n", strlen(d), d);

return 0;

}在我的运行环境下,a和c的结果正确,b的结果是"xyzabc",d的结果是"ABC123456",都是不可预料的结果。在其他编译器、运行环境下,a和c应当还是正确的,b和d结果可能有所不同。总之,使用字符串时,需要按照C语言的规定来,才能有正确结果,否则即使能够通过编译,得到的结果也是不可预料的。所谓“自己亲手编程验证”,很可能有不完善的地方,不可作为正确与否的依据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值