一道很简单的笔试题:

smartgyf 2010-03-30 06:14:13

#include <stdio.h>
void fun()
{
int i;
char buf[8];
for(i=0;i<5;i++)
{
sprintf(buf,"string%d",i*100);
printf("%s\n",buf);
}
}
void main()
{
fun();
}
输出的结果为什么是:
string0
string100

但是那个数组的长度只有8B,"string"和'\0'已经占据了7个字节,何来输出string100。而且怎么输出两行就停止了。我觉得纳闷了。
...全文
279 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
soon 2010-04-01
  • 打赏
  • 举报
回复
再进行一下提示。在VC6.0环境下。如果楼主把char buff[8]与int i的位置换一下。就应该知道了。此题出题者的思路是考对局部变量所在的段和各变量的排序。
zhangxichao 2010-03-31
  • 打赏
  • 举报
回复
这个题确实不简单,但可能不严谨,不同编译环境下面堆栈分配方法可能完全不同
bobo364 2010-03-31
  • 打赏
  • 举报
回复
#include <stdio.h>
void fun()
{
int i;
char buf[8];
for(i=0;i<5;i++)
{
sprintf(buf,"string%d",i*100);
printf("%s\n",buf);
}
}
int main()
{
fun();
system("pause");
return 0;
}


gcc里没报错,应该是报错的,因为string100肯定是超过8个字符了,不明白
jx1j1x 2010-03-31
  • 打赏
  • 举报
回复
无聊题。一个程序员写出这样的代码就是严重的不合格,应该说一个好的程序员不可能出现这样的错误。
这样的代码页毫无用处。
zzmlake 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 findcsdn 的回复:]
栈的内存情况
i4
i3
i2
i1 - > i
buf8
buf7
buf6
buf5
buf4
buf3
buf2
buf1 - > buf

buf=string100时,显然 i1='0'=48 也就是i=48 所以跳出循环。
[/Quote]

高手,学习一下
zc82586321 2010-03-31
  • 打赏
  • 举报
回复
顶……………………………………………………………………
jing78704478 2010-03-31
  • 打赏
  • 举报
回复
学习学习
Myth_cn 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 findcsdn 的回复:]
栈的内存情况
i4
i3
i2
i1 - > i
buf8
buf7
buf6
buf5
buf4
buf3
buf2
buf1 - > buf

buf=string100时,显然 i1='0'=48 也就是i=48 所以跳出循环。
[/Quote]

soon 2010-03-30
  • 打赏
  • 举报
回复
这个题不错。呵呵。楼主把i*100改为5试试。再改为10试试。
出此题的人应该对汇编撑握得不简单。
djh512 2010-03-30
  • 打赏
  • 举报
回复
那为什么100能输出 到200就不能呢 ?
Targui1989 2010-03-30
  • 打赏
  • 举报
回复
下标越界了!
bacbyr 2010-03-30
  • 打赏
  • 举报
回复
越界还能输出?不报错?
bacbyr 2010-03-30
  • 打赏
  • 举报
回复
越界还能输出?不报错?
shonsy 2010-03-30
  • 打赏
  • 举报
回复
越界了,但不影响输出
cy330206 2010-03-30
  • 打赏
  • 举报
回复
不过去看看那些不是货的人还是不错的。。呵呵
cattycat 2010-03-30
  • 打赏
  • 举报
回复
明显越界了,这种问题拿出来笔试,只能说明这帮人技术不怎么样。
findcsdn 2010-03-30
  • 打赏
  • 举报
回复
栈的内存情况
i4
i3
i2
i1 - > i
buf8
buf7
buf6
buf5
buf4
buf3
buf2
buf1 - > buf

buf=string100时,显然 i1='0'=48 也就是i=48 所以跳出循环。




alexhilton 2010-03-30
  • 打赏
  • 举报
回复
明显少了三个输出吧
其他就是越界问题了!
smartgyf 2010-03-30
  • 打赏
  • 举报
回复
上面说错了e。我觉得这个面试题真是垃圾。还有一个就是在单向链表中,在指针P指向的结点之前插入新元素,指针S指向新节点,这种情况怎么解答啊,我作了半天还是没有解决。一般情况都是在指针P指向的结点之后插入新元素,那个是北京和时利公司的笔试题目。
smartgyf 2010-03-30
  • 打赏
  • 举报
回复
我觉得这个面试题真是垃圾。还有一个就是在单向链表中,在指针S指向的结点之前插入新元素,指针S指向新节点,这种情况怎么解答啊,我作了半天还是没有解决。一般情况都是在指针S指向的结点之后插入新元素,那个是北京和时利公司的笔试题目。
加载更多回复(4)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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