用于循环的C ++里面的数组

时间:2011-04-12 00:19:34

标签: c++ arrays

当我在for循环中写array[i] = '\0'时会发生什么?

char arrayPin[256];

for(int i = 0; i<256; i++) 
{ 
    arrayPin[i] = '\0'; 
}

3 个答案:

答案 0 :(得分:2)

程序尝试访问<base address of 'array'> + (<sizeof array element> * 'i')位置的内存并为其分配值0(二进制0,而不是字符'0')。此操作可能成功也可能不成功,甚至可能使应用程序崩溃,具体取决于“阵列”和“i”的状态。

如果您的数组类型为char*char[]且赋值操作成功,则在位置'i'处插入二进制0将截断该位置的字符串,当它与理解C风格的字符串(printf()是一个例子)。

因此,如果您在字符串的整个长度上以for循环执行此操作,则将清除字符串中的任何现有数据并使其被事物解释为空/零长度字符串处理C风格的字符串。

答案 1 :(得分:1)

char arrayPin[256];

在上面一行之后,arrayPin在未初始化的数组中,其内容未知(假设它不是全局的)。

     ----------------------------
     |?|?|?|?|?|?|?|?|?|?|...|? |
     ----------------------------
byte: 0 1 2 3 4 5 6 7 8 9     255

以下代码:

for(int i = 0; i<256; i++) 
{ 
    arrayPin[i] = '\0'; 
}

将每个arrayPin元素初始化为0:

     ----------------------------
     |0|0|0|0|0|0|0|0|0|0|...|0 |
     ----------------------------
byte: 0 1 2 3 4 5 6 7 8 9     255

答案 2 :(得分:0)

我想你有char *array之类的东西。在这种情况下,它会将代码为0x00的字符写入i位置。

使用ANSI字符串时,这非常有用。 \0表示字符串的结尾。例如:

char str[] = "Hello world";
cout << str << endl; // Output "Hello world"
str[5] = '\0';
cout << str << endl; // Output just "Hello"