【问题标题】:char[] manipulation in CC 中的 char[] 操作
【发布时间】:2011-05-04 17:36:05
【问题描述】:

假设我定义如下:

unsigned char temp[2][13];

将分配给此char[] 的默认值是什么?是不是像{'', '', '', ... , ''}

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

如何清除这些数组?

【问题讨论】:

    标签: c char pic


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      无符号字符 temp[2][13] = {0};

      【讨论】:

        【解决方案3】:

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

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

        您通常应该计划使用memset() 等函数自己初始化此类数据。

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

            要么没有为数组元素分配默认值(读取值是未定义的行为),要么分配了 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]tmp[0][4]tmp[1][0]之外的所有元素都是0(零)。

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

            for (j=0; j<2; j++) {
                for (k=0; k<13; j++) {
                    tmp[j][k] = 0;
                }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-04-14
              • 2021-08-16
              • 1970-01-01
              • 1970-01-01
              • 2017-04-27
              • 2023-03-09
              • 1970-01-01
              相关资源
              最近更新 更多