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 个字节,以便它可以容纳其他字符加上终止的空字节以使其成为字符串。您还需要添加该空字节。
char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;
推荐阅读
- google-apps-script - 如何在 AppScript 中为表单创建上传选项?
- android - 如何在 exoplayer 中播放受 drm 保护的内容?
- angular - 从两个不同的组件添加相同的服务数组中的元素 - 角度
- node.js - Braintree 支付 Apple Pay,支付给 PayPal
- c - gethostbyname 未知主机
- linux - 主偏移值在 ptp4l 中波动的原因可能是什么
- python - flasksaml2idp SAML 注销请求参数
- android - 由于配置更改而重新启动活动
- java - 我们如何才能同时执行 2 个 get 请求 放心 API 测试
- python - 行号索引减去数据框中最后一个非零元素的行索引