c++ - 字符数组初始化的区别

标签 c++ arrays

我对字符数组初始化执行以下操作:

  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/

相关文章:

c++ - 为什么 `initializer_list<pair>` 和 `initializer_list<tuple>` 的行为不同?

c++ - if-else 和三元运算符的不同行为

c++ - 为什么按值返回的未命名对象在调用其转换运算符之前会被破坏?

c - C 中使用变量或指针访问结构体成员

javascript - 迭代对象数组以填充输入字段

arrays - 这种类型的 golang 字符串 slice 会在底层字节数组中泄漏内存吗?

javascript - 使用 JSON 将动态数组传递给 Morris Chart

iphone - objective-c 中的通用数组

c++ - 无法启动程序,访问被拒绝

c++ - 为什么我会收到此 'enum' 不是类或命名空间错误?