不太明白这个程序的结果为什么会是这样?

JetWon 2009-09-21 01:10:21
#include <stdlib.h>
#include <stdio.h>
void main()
{
char a[3][4] = {”aaa”, ”bb”, ”ccc”};
char (*q)[4] = a;
char *p;
int i;
p = malloc(sizeof(char)*1);
*p = ’b’;
*(*q+3) = *p;
for (i = 0; i<3; i++){
printf(“%s ”, q[i]);
}
}
这个程序的结果为:aaabbb bb ccc
很奇怪为什么不是:aaab bb ccc
对指针这块还不是很透,希望高手指点一下。
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
2009-09-21
  • 打赏
  • 举报
回复
一楼笔误……*q+3 为 &a[0][3]……
HengStar 2009-09-21
  • 打赏
  • 举报
回复
char a[3][4] // a的一维长度是3
char (*q)[4] = a; // q指向a的首地址
*(*q+3) = *p; // q+3应该是相当于a[3],a的一维下标只能到2,3肯定溢出了
2009-09-21
  • 打赏
  • 举报
回复
又来了一个溢出问题……
a[0] 是 "aaa\0"(非标准写法)
*q+3 为 &a[0][4]
*(*q+3) = 'b' 使得 a[0] 无法以 \0 结尾,输出时溢出到 a[1]

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧