使用指向存储在struct C中的数组的指针访问数组

时间:2015-03-25 10:47:01

标签: c arrays struct

我有一个结构定义如下:

typedef char *element_t;

typedef
struct {
  element_t *array;     /* start of the array */
  int capacity;         /* number of elements the array */
  int length;           /* used portion of array, 0..capacity */
} list;

我正在尝试访问*array指向的数组并为其指定一个char值并打印它。

我对C有点生疏,但这就是我想要做的事情:

list.array[0] = "a";
printf("%s\n", list.array[0]);

这使我的程序崩溃。任何修复?

编辑:我还应该提到我也做了以下初步修改:

element_t* array[LMAX];
list.array= *differentArray;

3 个答案:

答案 0 :(得分:2)

似乎对我有用:

typedef char *element_t;

typedef
struct {
  element_t *array;     /* start of the array */
  int capacity;         /* number of elements the array */
  int length;           /* used portion of array, 0..capacity */
} list;

int main(int argc, char **argv)
{
    element_t array[2] = {"foo", "bar"};
    list list;
    list.array = array;
    list.capacity = sizeof(array)/sizeof(array[0]);
    list.length = 1;
    printf("%s\n", list.array[0]);
    return 0;
}

您很可能忘记指定list.array指向有效数组。

答案 1 :(得分:1)

将初始化更改为:

element_t differentArray[LMAX];
list.array = &differentArray[0];

其余代码应该在此更改后按原样运行。只要您只将"a"这样的文字放入其中,就不需要任何进一步的分配。

答案 2 :(得分:1)

typedef char *element_t;不要隐藏在typedef后面的指针,这是不好的做法,因为它使代码不可读。 element_t *arraychar** array相同。这实际上是你想要的吗?

list.array[0] = "a";建议你打算将“数组”作为一个指针数组?你在哪里分配实际的数组?你在哪里初始化结构? list.array [0]指向la-la-land而不是分配的内存,据我所知,从发布的代码中可以看出。

此外,指针数组必须是const char*类型,因为你指的是字符串文字。