为什么数组不接受空终止符?

时间:2018-05-12 11:58:20

标签: c arrays while-loop null

我正在尝试在此数组的末尾插入一个null终止符。我该如何解决?

int cool_array[10] = {0};
int i = 0;
while (i < 5) {
    cool_array[i] = 5;
    i++;
}

cool_array[i] = {'\0'} // this is where the problem is. I get an error.

错误:

error: expected expression
legal_cards[legal_counter] = {'\0'};
                             ^
1 error generated.

1 个答案:

答案 0 :(得分:1)

正如@achai指出的那样,我们通常保留术语“null终止符”,用于与包含字符串数据的char数组相关联。然而,在其他类型的数组中使用值0作为数据结束标记也没有任何内在错误,但这样的约定绝不是通用的。

您收到错误,因为终结器分配的语法错误。您正在分配cool_array[i],其类型为int。因此,赋值的右侧必须是int类型的表达式。那可以是'\0'或(100%等效)只有0,但花括号({})没有位置。

cool_array[i] = 0;

您可能对cool_array声明中出现类似的代码感到困惑:

int cool_array[10] = {0};

请注意,这是一个声明,而不是可执行语句,并且内部没有任何赋值。它包含数组的初始值设定项,但是虽然它具有相似的形式,但语法和语义都与赋值不同。具体来说,它表示将数组的第一个元素(显式)初始化为0,并隐式初始化所有其他元素(为0)。