柔性数组输出问题

C_elite_ 2016-05-10 10:31:35
#include<stdio.h>
#include<malloc.h>

typedef struct str
{
int len;
int array[];
}Softarray;

int main()
{
int i;

Softarray* str=(Softarray*)malloc(sizeof(Softarray)+sizeof(int)*20);
str->len=20;

str->array[0]=1;
str->array[1]=1;
for(i=1;i<str->len;i++)
{
str->array[i]=str->array[i-1]+str->array[i-2];
}

printf("%d\n",str->array[-1]);
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-16
  • 打赏
  • 举报
回复
炫技或装B有时也是刚需。
C_elite_ 2016-05-13
  • 打赏
  • 举报
回复
为什么str->array[-1])的值会等于str->len的值啊
lm_whales 2016-05-11
  • 打赏
  • 举报
回复
str->array[0]=1; str->array[1]=1; for(i=1;i<str->len;i++)//这句改为 for(i=2;i<str->len;i++) ///就可以了 因为 第 0,1元素,都已经初始化了, ///所以从第2个元素开始,初始化其余的数组元素,就可以了 printf("%d\n",str->array[-1]); 这个也没有必要啊, 既然成员 len;有自己的名字,不需要取 ,str->array[-1]);
galiniur0u 2016-05-11
  • 打赏
  • 举报
回复
不知道楼主的问题在哪?按照楼主的方式,a[1] = a[0] + a[-1];由于结构体中均为int型数据,导致a[-1]取到了len的值,也就是a[1] = 1 + 20 = 21,如果楼主希望是a[2] = a[1] + a[0];请在循环中将i初始化为2.下面是按照楼主的程序打印出的结果,可供楼主参考。
dustpg 2016-05-10
  • 打赏
  • 举报
回复
第一次循环,i = 1, str->array[i-2];不就是越界了。 还有,我记得这个特性(标记为空)属于HACK, C99要求标记长度为0,或者我记岔了

69,364

社区成员

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

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