0

我试图在这个数组的末尾插入一个空终止符。我将如何解决它?

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.
4

2 回答 2

1

正如@achai 指出的那样,我们通常保留术语“空终止符”以用于char包含字符串数据的数组。尽管如此,在其他类型的数组中使用值 0 作为数据结束标记也没有本质上的错误,但这样的约定绝不是普遍的。

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

cool_array[i] = 0;

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

int cool_array[10] = {0};

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

于 2018-05-12T12:25:27.053 回答
1

首先,这个(整数)数组末尾的空终止符 没有任何意义。如果它char array那么它应该是空终止的。

cool_array[i] = '\0';不需要,因为您已经初始化cool_array如下

int cool_array[10] = {0}; /* here itself cool_array all elements initialized with zero */

其次,如果cool_array是 char 数组,char cool_array[10]那么它应该是

cool_array[i] = '\0'; /*  make sure i value is within range i.e 0 to 9 as you declare cool_array[10]  */

代替

cool_array[i] = {'\0'};
于 2018-05-12T11:59:28.290 回答