C++ C+中的数组+;内正循环

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"

在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的字符写入
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