大家好日子。我有以下c字符串初始化:
*(str) = 0;
其中str声明为char str[255];
。问题是:
1)这是以这种方式初始化字符串的最佳方法吗?
2)我是否应该在64位平台上遇到此代码的问题?
提前致谢。
答案 0 :(得分:1)
指令*(str) = 0
完全等同于str[0] = 0;
。
初始化只是将整数0
(相当于'\0'
)放在第一个位置,使字符串为空。
1)没有"最好的方式",关键是一致的,所以如果你选择" *(str) = 0;
"路径,到处都是一样的。
2)这句话不会有任何麻烦。无论架构如何,编译器都会处理所有事情。
答案 1 :(得分:0)
这样做是为了更改未初始化的char
数组str
,其中每个元素都有一些未定义的值,以使其第一个元素设置为空终止符。
就大多数与字符串相关的函数而言,它们将从左到右遍历此字符串,并立即看到空终止符。
肯定有些函数不关心null终止符,并且给出了最大大小。在这些情况下,您正在读取未定义的值,即Bad™。
请改用:
char str[255] = { 0 }; // zero every element
或将字符串初始化为首次使用时有用的东西。