首页 > 解决方案 > 如果指针在赋值给它的内存位置后增加会发生什么?

问题描述

考虑以下示例,

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

标签: cpointersmemorystack

解决方案


charArr仅大到足以容纳它初始化的三个字符。该数组不能保存任何其他字符,甚至没有空间用于终止空字节以使其成为正确的字符串。

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

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

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

推荐阅读