gpt4 book ai didi

c - 初始化二维动态数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:25 24 4
gpt4 key购买 nike

我是 C 的新手,正在尝试初始化一个二维数组。我需要数组的两列都是 char *,因为它们将包含字符串值。

我让它与存储整数的数组一起工作,但出于某种原因,当我尝试存储字符串值时,它会在打印时显示 (null)。下面是我如何将数据初始化和存储为 int 的代码(这似乎有效)。

int **array;
int row = 0;

array = malloc(2 * sizeof(int*));
int i;
for (i = 0; i < 2; i++)
{
array[i] = malloc(2 * sizeof(int));
}

array[0][0] = i;
array[0][1] = i;

printf("array[0][0]: %i\n", array[0][0]);

下面是我如何执行上述操作,但使用字符串值代替。

char **array;
int row = 0;

array = malloc(2 * sizeof(char*));
int i;
for (i = 0; i < 2; i++)
{
array[i] = malloc(2 * sizeof(char*));
}

array[0][0] = "Test[0][0]";
array[0][1] = "Test[0][1]";

printf("array[0][0]: %s\n", array[0][0]);

感谢您提供的任何帮助。

最佳答案

您的指针间接级别错误,这使事情过于复杂。

如果您将数组视为结构数组,我认为对您来说会更容易,每个结构包含两个指针:

struct row {
char *column1;
char *column2;
};

那么(希望)更清楚的是,一旦您分配了一个 struct row 数组,您在每一行中有两个指针,您不需要分配指针本身的空间。

const size_t num_rows = 1;
struct row * rows = malloc(num_rows * sizeof *rows);
if(rows != NULL)
{
rows[0].column1 = "row 0, column 1";
rows[0].column2 = "row 1, column 2";
}

请注意,这使用字符串文字,否则您可能需要为要存储的字符串分配空间,具体取决于数据的来源。

num_rows 值当然可以来自程序中的任何位置,我只是想说明是什么控制了内存分配的行数。

关于c - 初始化二维动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com