[菜鸟]为什么分明size除了2,wmemset还是越了界
一个结构:
9 struct teacher{
10 char name[MAX_STRLEN];
11 short subject;
12 short take; /* number of classes teacher take */
13 short inclass[MAX_WEEK_LESSON];
14 short day_lesson[7];
15 };
这样的初始化这个teacher结构的一个长ntchr的数组tchrs:
12 for(i=0;i<ntchr;i++){
13 tchrs[i].subject=-1;
14 tchrs[i].take=0;
15 bzero(tchrs[i].day_lesson,sizeof(tchrs[0].day_lesson));
16 wmemset((wchar_t*)tchrs[i].inclass,-1,
17 sizeof(tchrs[0].inclass)/sizeof(tchrs[0].inclass[0]));
18 }
gdb发现它越界了,这里我监视tchrs[0],注意在wmemset之后连day_lesson都变-1了:
15 bzero(tchrs[i].day_lesson,sizeof(tchrs[0].day_lesson));
6: tchrs[0] = {
name = '\0' <repeats 29 times>,
subject = -1,
take = 0,
inclass = {0 <repeats 75 times>},
day_lesson = {0, 0, 0, 0, 0, 0, 0}
}
(gdb)
16 wmemset((wchar_t*)tchrs[i].inclass,-1,
6: tchrs[0] = {
name = '\0' <repeats 29 times>,
subject = -1,
take = 0,
inclass = {0 <repeats 75 times>},
day_lesson = {0, 0, 0, 0, 0, 0, 0}
}
(gdb)
12 for(i=0;i<ntchr;i++){
6: tchrs[0] = {
name = '\0' <repeats 29 times>,
subject = -1,
take = 0,
inclass = {-1 <repeats 75 times>},
day_lesson = {-1, -1, -1, -1, -1, -1, -1}
}
我没语言了,望高人指点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
复制代码改成
复制代码我看它还越界?
回复 2# nketc
为何这样就不越了?
回复 3# jeung
我没试,你试了吗?
如果没越的话,打印 sizeof (wchar_t)就明白了。
本帖最后由 jeung 于 2011-04-19 22:56 编辑
回复 4# nketc
发现了,原来是4,我一直以为是2。-1是0xFF...FF这样的吧
印象中 Windows上确实是2,linux下gcc是4
有懂行高手知道标准咋规定的吗?
回复 6# nketc
C 标准的作风一向是“够大就好”,或者“XX 的表示范围是 XX 的一个子集”之类的
有印象,是这样,