C++ C+中的数组+;内正循环
在for循环中写入C++ C+中的数组+;内正循环,c++,arrays,C++,Arrays,在for循环中写入array[i]='\0'时会发生什么 char arrayPin[256]; for(int i = 0; i<256; i++) { arrayPin[i] = '\0'; } chararraypin[256]; 对于(int i=0;i我假设您有类似于char*array的内容。在这种情况下,它将代码为0x00的字符写入ith位置 这在处理ANSI字符串时非常有用。\0表示字符串的结尾。例如: char str[] = "Hello world"
array[i]='\0'
时会发生什么
char arrayPin[256];
for(int i = 0; i<256; i++)
{
arrayPin[i] = '\0';
}
chararraypin[256];
对于(int i=0;i我假设您有类似于char*array
的内容。在这种情况下,它将代码为0x00的字符写入i
th位置
这在处理ANSI字符串时非常有用。\0
表示字符串的结尾。例如:
char str[] = "Hello world";
cout << str << endl; // Output "Hello world"
str[5] = '\0';
cout << str << endl; // Output just "Hello"
char str[]=“你好,世界”;
cout程序尝试访问+(*'i')
位置的内存,并将值0分配给它(二进制0,而不是字符“0”)。此操作可能成功,也可能失败,甚至可能使应用程序崩溃,具体取决于“array”和“i”的状态
如果数组的类型为char*
或char[]
,并且赋值操作成功,那么在位置“i”插入二进制0将在该位置截断字符串,因为它与理解C样式字符串的内容一起使用(printf()
是一个示例)
因此,如果在整个字符串长度上的for
循环中执行此操作,将清除字符串中的所有现有数据,并使处理C样式字符串的对象将其解释为空/零长度字符串
char arrayPin[256];
在上一行之后,arrayPin
位于内容未知的未初始化数组中(假设它不是全局数组)
以下代码:
for(int i = 0; i<256; i++)
{
arrayPin[i] = '\0';
}
在这种特殊情况下,另一种方法是memset(arrayPin,0,256);
修改字符串文本的内容实际上是未定义的行为。如果要修改字符串,请使用char str[]=“Hello world”
。
for(int i = 0; i<256; i++)
{
arrayPin[i] = '\0';
}
----------------------------
|0|0|0|0|0|0|0|0|0|0|...|0 |
----------------------------
byte: 0 1 2 3 4 5 6 7 8 9 255