gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:16:56 25 4
gpt4 key购买 nike

考虑以下示例,

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com