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# byte 与 int 短整数值

memory - cudaMemGetInfo 在 GTX 690 的两个设备上返回相同数量的可用内存

改变线程执行的函数

c - -> 结构体中的运算符

C套接字仅使用二进制数据造成内存泄漏

c - 我的词法分析器遇到困难

c++ - 指针实际上并不指向对象本身?

检查指针是否指向 int 数组上的空白空间

c++ - main() 内外的字符指针声明

C++ 运行时抢占堆栈溢出