c - 如果在给指针的内存位置赋值后指针递增,会发生什么情况?

标签 c pointers memory stack

考虑以下示例,

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

相关文章:

c - 如何将固定值传递给指针?

c++ - 这会被认为是好的 C++ 代码吗

memory - 如何对函数的内存使用情况进行基准测试?

memory - 谷歌云平台 : how to monitor memory usage of VM instances

C单链表抛出错误

c++ - sizeof 如何知道操作数数组的大小?

C 数组 64 位递增

c++ - C++中的内部函数内存限制

c - 标准 I/O 和低级 I/O 的区别

C - 在文件之间正确重用代码/方法