检查char是否为空

时间:2013-02-13 22:29:07

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

我将代码从java转换为C ++有一个小问题

我正在尝试检查是否设置了2d数组,这是我的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 ++中正确检查变量是否为空(未设置)?

2 个答案:

答案 0 :(得分:5)

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

特别是,对于charint等,该值不大可能为0,并且您绝不应该依赖它来获得任何特定值。如果您希望在开始使用阵列单元格之前将其初始化为0,则必须手动初始化它们。

如果你来自Java世界,你可能会认为这是一项不必要的工作,但考虑到你正在使用C风格的数组,并且C并不意味着牺牲程序员时间的性能。有些情况下,初始化为0将无用地浪费CPU时间,并且您不想为不使用的内容付费。

答案 1 :(得分:3)

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

您在java中的代码似乎有效,因为在Java中,编译器会为所有已创建但未初始化的原始数据类型提供默认值。在char的情况下,它是'\ u0000',相当于0。

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