0

假设我定义以下内容:

unsigned char temp[2][13];

将为此分配什么默认值char[]?是这样{'', '', '', ... , ''}吗?

在我的程序(计算器)中,我有operand[2][13](第一个操作数是operand[0],第二个操作数是operand[1])并且我有 OperationResult[15]并且它们都是unsigned char. 首先,用户将输入 Operand1 和 Operand2(一次一个字符)并将其存储在operand[2][13]然后程序将结果作为字符存储在Result[15]. 现在我想要的是,在下一次迭代中,我想清除operand[2][13], 操作等,Result[15]以便用户可以输入下一个操作数,程序执行下一个操作并将结果保存在Result[15].

如何清除这些数组?

4

5 回答 5

3

memset(operand, 0, 2 * 13);
memset(Result, 0, 15);

于 2011-05-04T17:39:26.890 回答
2

没有默认值。一个都没有。确保您自己设置它们。这是一个方便的表格:

无符号字符 temp[2][13] = {0};
于 2011-05-04T17:39:39.290 回答
2

''不是一个值。事实上,指定一个“空”字符是没有意义的。

通常不会为您初始化数据。数据将是分配之前内存中的任何内容。例外情况是,如果这是静态数据,则应将其清零 ('\0')。

您通常应该计划使用诸如memset().

于 2011-05-04T17:39:50.037 回答
1

这取决于定义它的上下文。

如果它是在函数之外(全局)声明的,它将驻留在.bss可执行文件的部分中,并且操作系统将在程序启动时将整个数组初始化为零,然后main调用。

如果它是在本地(在堆栈上)声明的,它将包含那里的任何垃圾,然后您可以使用memset或使用适当的数组初始化程序对其进行初始化。

于 2011-05-04T17:39:58.803 回答
1

要么没有为数组元素分配默认值(读取值是未定义的行为),要么分配了 0(零),具体取决于数组的定义方式和位置。

全局和静态数组初始化为 0(零)

unsigned char aglobal[2][13]; /* all zeroes */
int foo(void) {
    static unsigned char astatic[2][13]; /* all zeroes */
    unsigned char aauto[2][13]; /* unset, ub to read values */
}

您可以根据自己的喜好进行初始化

unsigned char tmp[2][13] = {{1, 2, 3, 4, 5}, {11}};

上述初始化的效果是除了tmp[0][0]totmp[0][4]和之外的所有元素都是 0(零) tmp[1][0]

或者在你的代码中间一一设置元素,初始化后:

for (j=0; j<2; j++) {
    for (k=0; k<13; j++) {
        tmp[j][k] = 0;
    }
}
于 2011-05-04T17:43:32.983 回答