这个算是GCC的BUG吗?

nxbtch 2012-10-08 01:39:28
#include<stdio.h>
#define gdb(s) printf("%s",s)

struct num{
int val;
char str[];
};

int _getLine(char str[]);

int main(){
struct num e[4];
int i,j;

for(i=0;i<4;++i){
j=_getLine(e[i].str);
printf("%d and i is %d",j,i);
gdb("fuzhi\n");
}

for(i=0;i<4;++i){
//printf("%d ",e[i].val);
printf("%s ",e[i].str);
gdb("shuchu\n");
}

gdb(e[3].str);
printf("\n");
return 0;
}

int _getLine(char str[]){
int c,m;
m=0;
while((c=getchar())!=EOF&&c!='\n'){
str[m]=c;
++m;
}
str[m]='\0';
return m;
}

这是输出,每次的输出还都不一样,i的最后一个值竟然不是3


...全文
51 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nxbtch 2012-10-08
  • 打赏
  • 举报
回复
为什么i的赋值会受影响?他们的复制都是在一段内存上的?
图灵狗 2012-10-08
  • 打赏
  • 举报
回复
struct num中的str没有分配空间就直接用了,会有内存覆盖的隐患,改成如下的:
struct num{
int val;
char str[81];
};
nxbtch 2012-10-08
  • 打赏
  • 举报
回复
我擦,图片都发不了。
nxbtch@Fuck:~/workbench/24dian$ ./a.out
dsa
3 and i is 0fuzhi
das
3 and i is 1fuzhi
asd
3 and i is 2fuzhi
as
2 and i is 29537fuzhi
dsa shuchu
das shuchu
asd shuchu
shuchu
e[3]is:

nxbtch 2012-10-08
  • 打赏
  • 举报
回复

69,371

社区成员

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

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