求各位大牛指点

yanglei101 2012-10-23 11:07:42
#include <iostream>

using namespace std;


int main()
{
int arr[7];

memset(arr,0,sizeof(arr));

int arr1[] = {1,2,3,4,5,6,7};

memcpy(arr,arr1,7);

int N;
N = sizeof(arr)/sizeof(int);

cout<<N<<endl;

arr[N] = 2;

cout<<N<<endl;

}

为何这个N的值会变成2呢?输出结果为7,2。求各位路过的教教小弟。
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanglei101 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:
引用 3 楼 的回复:

说了是不可预料的结果,你仍然越界了啊。


+ +
++
[/Quote]

又见非主流
笨蛋糕 2012-10-23
  • 打赏
  • 举报
回复
没有看太明白
GodGPF 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:

说了是不可预料的结果,你仍然越界了啊。


+ +
[/Quote]++
yanglei101 2012-10-23
  • 打赏
  • 举报
回复
我知道是越界了,可是我想问的是gcc编译器为什么会这样(我是用gcc编译的),有木有哪位大神晓得,个人比较好奇。
Anthony_yt 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

说了是不可预料的结果,你仍然越界了啊。
[/Quote]

+ +
图灵狗 2012-10-23
  • 打赏
  • 举报
回复
说了是不可预料的结果,你仍然越界了啊。
yanglei101 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

arr[N] = 2;越界了,产生了不可预料的结果。C语言的数组下标是从0到N-1的,改为arr[N-1] = 2就会正常了。
[/Quote]

#include <iostream>

using namespace std;


int main()
{
int arr[9];

memset(arr,0,sizeof(arr));

int arr1[] = {1,2,3,4,5,6,7};

memcpy(arr,arr1,sizeof(arr1));

int N;
N = sizeof(arr)/sizeof(int);

cout<<N<<endl;

arr[N] = 2;

cout<<N<<endl;

}

为何这样输出的就是9,正确的值呢?
图灵狗 2012-10-23
  • 打赏
  • 举报
回复
arr[N] = 2;越界了,产生了不可预料的结果。C语言的数组下标是从0到N-1的,改为arr[N-1] = 2就会正常了。
GodGPF 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 6 楼 的回复:

引用 4 楼 的回复:
引用 3 楼 的回复:

说了是不可预料的结果,你仍然越界了啊。


+ +
++


又见非主流
[/Quote]你妹

64,684

社区成员

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

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