我有点困惑,这是允许的:
char num[6] = "a";
这里发生了什么?我是否指定了一个指向数组的指针或将文字值复制到数组中(因此我以后可以修改它们)?
答案 0 :(得分:5)
- 为什么我可以指定一个小于数组本身的字符串文字?这里发生了什么?
醇>
这是明确的定义。当initialize character arrays with string literal时,
如果指定了数组的大小并且它大于该数字 字符串文字中的字符,其余字符是 初始化为零。
所以,
char num[6] = "a";
// equivalent to char num[6] = {'a', '\0', '\0', '\0', '\0', '\0'};
- 我是否指定了一个指向数组的指针或将文字值复制到数组中(因此我以后可以修改它们)?
醇>
值为copied,即数组的元素将由字符串文字的字符(包括'\0'
)初始化。
字符串文字可用于初始化字符数组。如果数组初始化为
char str[] = "foo";
,则str
将包含字符串" foo"的副本。字符串文字的连续字符(包括隐式终止空字符)初始化数组的元素。
答案 1 :(得分:3)
char num[6] = "a";
相当于
char num[6] = {'a', '\0', '\0', '\0', '\0', '\0'};
答案 2 :(得分:1)
为什么我可以指定一个小于数组本身的字符串文字?
语言允许这样做。稍后能够向数组添加更多字符通常很有用,如果现有字符填充整个数组,则无法实现。
我是否指定了一个指向数组的指针
没有。您无法为数组指定指针,因此不会发生这种情况。
或将文字值复制到数组
这正是发生的事情。
因此我以后可以修改它们
您确实可以修改数组。
答案 3 :(得分:0)
这种声明是一种特殊的语法糖事。它相当于
char num[6] = {'a', 0}
数组总是可以修改的。在这样的声明之后它的内容将是一个表示'a'
的字符,一个零(NUL终止符),并且数组的其余部分也将被清零(零初始化)。
答案 4 :(得分:0)
只需使用char num[6] = {"a"};
即可。它有效。
答案 5 :(得分:0)
这是一种类型的声明,等同于
char num[6] = {'a','\0'};
您声明了长度为max的c-string。 5个正常的字符,最后必须是\ 0到结束c - 字符串。
通过声明,您可以使用
char num[6] = "a";
然后你需要分配值:
使用strcpy(dest,src)
的strcpy(NUM, “测试”);
char by char
NUM [0] = 'T'; NUM [1] = 'E'; NUM [2] = 'S'; NUM [3] = 'T'; NUM [4] = '\ 0';