免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1346 | 回复: 4
打印 上一主题 下一主题

请大家帮我看看程序怎么回事,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-24 15:32 |只看该作者 |倒序浏览
目的:想建立一个结构体数组,把s1中的字符串赋给结构体数组中的key,s2中的字符串赋给结构体数组中的val
结果在1处的printf能正常输出,在2处的printf只能输出后面3组字符串,第一组不能正常输出,不知道怎么回事,请大家看看,谢谢了


  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #include <string.h>;
  4. struct SP
  5. {
  6.         char *key;
  7.         char *val;
  8. };
  9. main()
  10. {
  11.         struct SP *re;
  12.         int i;
  13.         char *s1[]={"aaa","bbb","ccc","ddd"};
  14.         char *s2[]={"111","222","333","444"};
  15.         re = (struct SP *)malloc(4*sizeof(struct SP*));
  16.         for (i = 0; i < 4;i++)
  17.         {
  18.                 re[i].key = (char *)malloc( strlen(s1[i]) + 1);
  19.                 strcpy(re[i].key,s1[i]);
  20.                 re[i].val = (char *)malloc( strlen(s2[i]) + 1);
  21.                 strcpy(re[i].val,s2[i]);
  22.                 printf("%s---%s\n",re[i].key,re[i].val);/*-------1*/
  23.         }
  24.         for (i = 0;i < 4;i++)
  25.                 printf("%s---%s\n",re[i].key,re[i].val);/*--------2*/
  26. /*........................................................................................*/
  27. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2005-10-24 15:47 |只看该作者

请大家帮我看看程序怎么回事,谢谢!


  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #include <string.h>;
  4. struct SP
  5. {
  6.   char *key;
  7.   char *val;
  8. };
  9. main ()
  10. {
  11.   struct SP *re;
  12.   int i;
  13.   char *s1[] = { "aaa", "bbb", "ccc", "ddd" };
  14.   char *s2[] = { "111", "222", "333", "444" };

  15.   re = (struct SP *) malloc (4 * sizeof (struct SP));
  16.   for (i = 0; i < 4; i++)
  17.     {
  18.       re[i].key = (char *) malloc ((sizeof (char) *(1+ strlen (s1[i]))));
  19.       strcpy (re[i].key, s1[i]);

  20.       re[i].val = (char *) malloc ((sizeof (char) * (1+strlen (s2[i]))));
  21.       strcpy (re[i].val, s2[i]);

  22.       printf ("%s---%s\n", re[i].key, re[i].val);
  23.     }
  24.   for (i = 0; i < 4; i++)
  25.     printf ("%s---%s\n", re[i].key, re[i].val);
  26. }

复制代码


看看哪些地方不一样

论坛徽章:
0
3 [报告]
发表于 2005-10-24 15:59 |只看该作者

请大家帮我看看程序怎么回事,谢谢!

      
恩,成功了,谢谢啊,能给我解释一下吗??
不怎么清楚呢,好人啊,嘿嘿
  1. re = (struct SP *) malloc (4 * sizeof(struct SP*));
复制代码

其他的我明白了,可是这一句为什么不行呢?

论坛徽章:
0
4 [报告]
发表于 2005-10-24 16:10 |只看该作者

请大家帮我看看程序怎么回事,谢谢!

因为你需要的是4个这个结构体(每个8byte)的大小,而不是4个指针(每个4byte)的大小阿,这次真的看书去了...

论坛徽章:
0
5 [报告]
发表于 2005-10-24 16:14 |只看该作者

请大家帮我看看程序怎么回事,谢谢!

哦,明白了
谢谢啊,嘿嘿,回去再看看书
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP