C语言 如果指针在为其内存位置赋值后递增,会发生什么情况?



考虑以下示例,

#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 反映。

charArr只够容纳初始化它的三个字符。 数组不能容纳任何其他字符,甚至没有空间容纳终止空字节来使其成为正确的字符串。

这意味着您正在写入数组的末尾。 这样做会调用未定义的行为,在这种情况下,该行为表现为意外输出。

数组的长度应至少为 6 个字节,以便它可以容纳其他字符加上终止 null 字节以使其成为字符串。 您还需要添加该空字节。

char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;

指针只是为了指出位置,您在更少的空间中输入数据,因此只需先增加 char 数组的长度,然后再处理,但是您的指针运行良好。

最新更新