我有一个结构定义如下:
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;
答案 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 *array
与char** array
相同。这实际上是你想要的吗?
list.array[0] = "a";
建议你打算将“数组”作为一个指针数组?你在哪里分配实际的数组?你在哪里初始化结构? list.array [0]指向la-la-land而不是分配的内存,据我所知,从发布的代码中可以看出。
此外,指针数组必须是const char*
类型,因为你指的是字符串文字。