我对字符数组初始化执行以下操作:
char a[] = "teststring";
char b[]={'a','a','b','b','a'};
首先,如果我需要获取字符串长度,我必须执行 strlen(a)
....对于另一个字符串,我应该执行 sizeof(b)/sizeof(b[0])
.
为什么会有这种差异?
编辑:(我明白了)
char name[10]="StudyTonight"; //valid character array initialization
char name[10]={'L','e','s','s','o','n','s','\0'}; //valid initialization
请记住,当您通过单独列出其所有字符来初始化字符数组时,您必须明确提供 '\0' 字符。
我知道对于 char b 我们必须添加 '\0' 才能进行正确的初始化。
另一个: 因此,称为 myword 的 char 元素数组可以通过以下两个语句之一用以 null 结尾的字符序列初始化:
char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char myword[] = "Hello";
最佳答案
字符串文字,如 "teststring"
包含双引号之间的字符,以及值为零的终止 char
。所以
char a[] = "ab";
效果与;
char a[] = {'a', 'b', '\0'};
strlen()
搜索值为 '\0'
的字符。所以 strlen(a)
在这种情况下将返回 2。
相反,sizeof()
获取实际使用的内存大小。由于 sizeof(char)
为 1,根据标准中的定义,这意味着 sizeof(a)
给出 3
的值 - 它计算'a'
、'b'
和 '\0'
。
关于c++ - 字符数组初始化的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667713/