当我在for循环中写array[i] = '\0'
时会发生什么?
char arrayPin[256];
for(int i = 0; i<256; i++)
{
arrayPin[i] = '\0';
}
答案 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"