C字符串初始化。可能的麻烦

时间:2014-05-27 08:28:40

标签: c string initialization 32bit-64bit

大家好日子。我有以下c字符串初始化: *(str) = 0;其中str声明为char str[255];。问题是:

1)这是以这种方式初始化字符串的最佳方法吗?

2)我是否应该在64位平台上遇到此代码的问题?

提前致谢。

2 个答案:

答案 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

或将字符串初始化为首次使用时有用的东西。