字符数组初始化的差异
Difference in the initialisation of character array
我对字符数组进行如下初始化:
char a[] = "teststring";
char b[]={'a','a','b','b','a'};
而对于第一个,如果我需要获得字符串长度,我必须执行strlen(a)
....对于另一个字符串,我应该用sizeof(b)/sizeof(b[0])
为什么会有这种差异?
编辑:(I got this)
char name[10]="StudyTonight"; //valid character array initialization
char name[10]={'L','e','s','s','o','n','s',' '}; //valid initialization
请记住,当您通过单独列出其所有字符来初始化字符数组时,必须显式地提供' '字符。
对于char b,我们必须添加' '来进行正确的初始化。
:因此,可以使用以下两种语句中的任何一种,用以空结尾的字符序列初始化名为myword的char元素数组:
char myword[] = { 'H', 'e', 'l', 'l', 'o', ' ' };
char myword[] = "Hello";
字符串字面值,如"teststring"
包含双引号之间的字符,加上值为0的终止char
。所以
char a[] = "ab";
与;
效果相同char a[] = {'a', 'b', ' '};
strlen()
查找值为' '
的字符。因此,在本例中,strlen(a)
将返回2。
相反,sizeof()
获得实际使用的内存大小。由于sizeof(char)
为1,根据标准中的定义,这意味着sizeof(a)
给出了3
的值-它计算了'a'
, 'b'
和' '
。
a
是c风格的字符串,即以空结尾的字符数组。初始化相当于:
char a[] = {'t','e','s','t','s','t','r','i','n','g',' '};
b
,然而,不是null终止,所以它不是一个c风格的字符串,你不能使用像std::strlen()
这样的函数,因为它们只对c风格的字符串有效。
字符串字量扩展为字符数组,但也包括结束的零字符。所以想想
char a[] = "teststring";
如果你有这个类型
char a[] = {'t','e','s','t','s','t','r','i','n','g',' '};
经验法则
在char数组上使用 strlen()
时,使用字符串字面值 its进行初始化。strlen
函数可以被认为是一个简单的扫描,结束零字符(