【问题标题】:Checking if char is empty检查 char 是否为空
【发布时间】:2013-01-29 15:25:49
【问题描述】:

我在将代码从 java 转换为 C++ 时遇到一个小问题

我正在尝试检查是否设置了二维数组,这是我的 java 代码

for(int area_y = y -1 ;area_y > 0 ;area_y--)
    {
        for(int area_x =  0 ;area_x < x; area_x++)
        {   
            if(area[area_x][area_y] == 0)
            {
                System.out.print(" "); // this is printed 
                                      //  if area[area_x][area_y] is not set 

            }
            else
            System.out.print(area[area_x][area_y]);


        }
            System.out.println();
    }

这是我的 c++ 代码,它可以工作

for(int area_y = y -1 ;area_y > 0 ;area_y--)
{
    for(int area_x =  0 ;area_x < x; area_x++)
    {   
        if(area[area_x][area_y] == 0) // this line does not work as
                                      // the next line is not executed
        {
            cout << "1";
        }
        else
        cout << (area[area_x][area_y]) ;                
    }

cout << endl;
}

问题在于检查是否设置了该变量,它是char area[20][50];

如何在 c++ 中正确检查变量是否为空(未设置)?

【问题讨论】:

  • 你能定义变量为“空”的含义吗?
  • 字符未使用该声明进行初始化。您总是可以将它们设置为 0。
  • 尝试将 char 数组声明为全局或用0 填充它作为初始化
  • @NikBougalis 为空,我的意思是未设置
  • 另外,您似乎对没有设置与拥有值 0 感到困惑。

标签: java c++ char is-empty isnullorempty


【解决方案1】:

在 C++ 中,标量类型的对象不是零初始化的。它们是默认初始化的,这意味着它们在初始化时获得的值是未定义的。

特别是,chars、int 等的值不太可能为 0,而且绝对不应该依赖它来获得任何特定值。如果您希望在开始使用它们之前将数组单元初始化为 0,则必须手动初始化它们。

如果您来自 Java 世界,您可能会认为这是不必要的大量工作,但请考虑您正在使用 C 风格的数组,而 C 并不是为了牺牲程序员的时间而牺牲性能。在某些情况下,初始化为 0 会无谓地浪费 CPU 时间,并且您不想为不使用的东西付费。

【讨论】:

    【解决方案2】:

    无法检查变量是否已“设置”。您只能检查它是否等于特定值。

    您在 java 中的代码似乎可以工作,因为在 Java 中,所有创建但未初始化的原始数据类型都由编译器赋予了默认值。如果是 char,则为 '\u0000',相当于 0。

    在 c++ 中,这些字符的值是未定义的。如果您想获得相同的行为,则需要在进行检查之前将所有字符显式设置为 0。

    【讨论】:

    • 在苦苦寻找如何检查是否设置了字符后,我根据您的信息修改了条件,Java代码成功了! myChar == 0 - 当char myChar; 从未收到值时,这有效地返回true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2013-07-18
    • 2013-07-12
    • 2013-07-27
    相关资源
    最近更新 更多