Chinaunix

标题: 请大家帮我看看程序怎么回事,谢谢! [打印本页]

作者: mmgg00    时间: 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. }
复制代码

作者: zalem    时间: 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. }

复制代码


看看哪些地方不一样
作者: mmgg00    时间: 2005-10-24 15:59
标题: 请大家帮我看看程序怎么回事,谢谢!
      
恩,成功了,谢谢啊,能给我解释一下吗??
不怎么清楚呢,好人啊,嘿嘿
  1. re = (struct SP *) malloc (4 * sizeof(struct SP*));
复制代码

其他的我明白了,可是这一句为什么不行呢?
作者: zalem    时间: 2005-10-24 16:10
标题: 请大家帮我看看程序怎么回事,谢谢!
因为你需要的是4个这个结构体(每个8byte)的大小,而不是4个指针(每个4byte)的大小阿,这次真的看书去了...
作者: mmgg00    时间: 2005-10-24 16:14
标题: 请大家帮我看看程序怎么回事,谢谢!
哦,明白了
谢谢啊,嘿嘿,回去再看看书




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2