考虑以下示例,
#include <stdio.h>
int main()
{
char charArr[3] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
printf("%s", charArr);
return 0;
}
我希望我能得到, c++qd 但我有c++r
q 的值增加 1 并变为“r”,我尝试使用其他增量,它按照 ASCII 进行反射(reflect)。
最佳答案
charArr
的大小仅足以容纳其初始化时使用的三个字符。该数组不能容纳任何其他字符,甚至没有空间用于终止空字节以使其成为正确的字符串。
这意味着您正在写入超出数组末尾的内容。这样做会调用 undefined behavior ,在本例中表现为意外输出。
数组的长度应至少为 6 个字节,以便它可以容纳附加字符加上终止空字节以使其成为字符串。您还需要添加该空字节。
char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;
关于c - 如果在给指针的内存位置赋值后指针递增,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291361/