如果我将一个字符数组初始化为零/{0},我是否必须空终止?

asd*_*553 1 c arrays initialization c-strings null-terminated

举例来说,我以以下方式声明了一个所有值都设置为零的 char 数组:

char array[4] = {0};
Run Code Online (Sandbox Code Playgroud)

如果我给它赋值,例如:

array[0] = 'A';
array[1] = 'B';
array[2] = 'C';
Run Code Online (Sandbox Code Playgroud)

我是否需要像这样空终止数组?:

array[3] = '\0';
Run Code Online (Sandbox Code Playgroud)

或者操作是否在char array[4] = {0}任何赋值之前终止?

Lun*_*din 5

我需要像这样 null 终止数组吗?

No.'\0'只是一种奇特的书写方式0。这是一种编写自记录代码的方法,特别是在传统之外引用空终止符。(它实际上只是一个写为八进制转义序列的零。)

由于您已经将所有项目设置为0,因此不需要额外的\0.

  • @asd23553 不,但是 `char array[4]; memset(&array[0], 0, sizeof(array))` 会是。 (4认同)
  • @伦丁啊??`array` 没有指向任何地方,而 `sizeof(array)` 是指针的大小。 (3认同)
  • 另请注意,`char array[4] = "";` 也会将所有项目设置为零。 (2认同)