+ -
当前位置:首页 → 问答吧 → 这个程序为什么报错?

这个程序为什么报错?

时间:2010-09-17

来源:互联网

struct group
{
    char *a[2][2];
};

void test(char ***str)
{
    str[0][0] = strdup("hello");
}

int main(void)
{
    struct group *g = malloc(sizeof(struct group));

    test(g->a);

}

作者: flystar707   发布时间: 2010-09-17

请各位高手给回答一下

作者: flystar707   发布时间: 2010-09-17

  1. void test(char ***str)
复制代码
改成
  1. void test(char *str[2][2])
复制代码
就可以了

作者: jackin0627   发布时间: 2010-09-17

我试试,谢谢

作者: flystar707   发布时间: 2010-09-17

  1. void test(char ***str)
  2. {
  3.     str[0][0] = strdup("hello");
  4. }
复制代码
等价于
  1. char **p = *str; /// 着个没有问题
  2. *p = strdup("");  /// 问题在这。
复制代码

作者: jackin0627   发布时间: 2010-09-17

  1. void test(char *str[2][2])
  2. {
  3.     str[M][N] = strdup("hello");
  4. }
复制代码
等价于
  1. *(str+ M*2 + N) =  strstrdup("hello");  //如当str==0x8000,M==2 N==1时,
  2.                                          //这句就是*(0x8014) = strdup();
复制代码

作者: jackin0627   发布时间: 2010-09-17

  1. typedef char *(*matrix)[2][2];

  2. struct group
  3. {
  4.     char *a[2][2];
  5. };

  6. void test(char ***str)
  7. {
  8.     matrix tmp = &str;
  9.     (*tmp)[0][0] = strdup("hello");
  10. }

  11. int main(void)
  12. {
  13.     struct group *g = malloc(sizeof(struct group));

  14.     test(g->a);

  15. }
复制代码

作者: krein8964   发布时间: 2010-09-17

或者
  1. typedef char *(matrix)[2][2];

  2. struct group
  3. {
  4.     char *a[2][2];
  5. };

  6. void test(matrix str)
  7. {
  8.     str[0][0] = strdup("hello");
  9. }

  10. int main(void)
  11. {
  12.     struct group *g = malloc(sizeof(struct group));

  13.     test(g->a);

  14. }
复制代码

作者: krein8964   发布时间: 2010-09-17