正在检查char是否为空
Checking if char is empty
我在将代码从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++中,标量类型的对象不是零初始化的。它们是默认初始化的,这意味着它们在初始化时获得的值是未定义的。
特别是,对于char
s、int
等,该值不太可能为0,而且绝对不应该依赖它来获得任何特定值。如果希望在开始使用数组单元格之前将其初始化为0,则必须手动初始化它们。
如果你来自Java世界,你可能会认为这是一项不必要的大量工作,但要考虑到你使用的是C风格的数组,C并不意味着为了程序员的时间而牺牲性能。在某些情况下,初始化为0会毫无意义地浪费CPU时间,而且您不想为不使用的东西付费。
无法检查变量是否已"设置"。您只能检查它是否等于特定值。
java中的代码似乎可以工作,因为在java中,所有创建但未初始化的原始数据类型都由编译器给定默认值。在char的情况下,它是'\u0000',相当于0。
在c++中,这些字符的值是未定义的。如果您希望具有相同的行为,则需要在进行检查之前将所有字符显式设置为0。
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 是否假定reinterpret_cast<char*>(myTypePtr)指向数组?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 如何更好地检查两个 char 变量是否在一组值中?
- 以这种方式初始化的 char 数组是否会自动添加空终止符?
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 知道模板参数在编译时是否为 const char*?
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- C++ 如何检查 char 变量是否未定义(未初始化)
- 严格的别名是否会阻止您通过其他类型写入 char 数组?
- 从内部使用静态 std::string 的函数返回 const char * 是否安全?
- char 和 char& 之间是否存在相对复制开销差异?
- 使用 std::vector<char> 作为异构记录的存储是否安全?
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 是否很好地定义了强制转换为仅由 char[] 组成的结构并从该数组读取?
- c ++ 如何断言 char 数组与否,检查 char 数组是否以 "0" 开头或包含"0"
- 使用 const char * 文字作为 std::map 键是否安全
- 是否可以将char **作为参数传递
- 是否可以<char> <int> 在 C++ 中将 std::list 转换为 std::list
- C# 是否有办法将双精度数组强制转换为类似于C++转换为 char* 的字符串?