正在检查char是否为空

Checking if char is empty

本文关键字:是否 char 检查      更新时间:2023-10-16

我在将代码从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++中的变量是否为空(未设置)?

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

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

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

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

java中的代码似乎可以工作,因为在java中,所有创建但未初始化的原始数据类型都由编译器给定默认值。在char的情况下,它是'\u0000',相当于0。

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