gpt4 book ai didi

c - 为二维数组中的每一项存储一个值

转载 作者:行者123 更新时间:2023-11-30 15:26:42 24 4
gpt4 key购买 nike

幸运的是,我想出了一个不错的标题,描述了我好奇的事情。虽然这对我来说确实很难解释,但我正在尽力而为。

我尝试过,将值存储在 3D 数组中,如下所示:char arr[10][10][1];要复制字符串,我必须在 arr[y][x] 中执行此操作,(遗憾的是我不能仅在 arr[y] 中执行)但是,由于我仍然未知的原因,我可能会使用 arr[8][8][8]溢出缓冲区。也许是因为 char** 的大小,但无论如何。我找不到一个插槽来存储每个项目(x 和 y)的字符

我试过了,但方式相反:char arr[1][10][10];假设我有 1 项 * x 和 y。要存储字符串,我必须在 arr[0][y] 中进行操作,这意味着第三个单元格将是字符串中的一个字符。

因此,作为一份简历,我尝试为 x 和 y 中的每个字符存储一个值。我真的需要 4D 数组吗?

<小时/>

额外说明:我知道一维和二维数组的用途。看来我无法理解 3D 数组。我认为我可以为 y 或 x 处的每个字符存储一个附加项目。示例:

char arr[y][x][z];其中 y 是行,x 是列,z 是适用于所有字符的附加项。

最佳答案

字符串是字符数组。因此,字符串数组是字符数组的数组。为什么你认为你需要第三维度,我不知道。

当您静态分配多维数组时,您必须指定它可以包含的最大项目数。在这种情况下,您必须指定允许字符串有多少字节长,其中包括一个用于空终止的字节。这是表达式中最右边的 [],在您的情况下为 1 个字节。

因此,您实际上根本没有分配任何内存来存储字符串:1 个字节足以存储 null 终止符,仅此而已。这就是为什么当 z 是 0 以外的任何其他值时尝试 [x][y][z] 时会出现崩溃/段错误。并且您也无法在那里存储任何有意义的内容。

char** 的大小与此完全无关。指针不是数组。

我强烈建议您学习有关 pointers and arrays 的 C 常见问题解答.

现在您可能想做的是这样的:

char string_array [10][20+1]; // 10 strings each containing 20 letters + null

strcpy(string_array[0], "hello");
strcpy(string_array[1], "world");
...
printf("%s\n", string_array[0]);
printf("%s\n", string_array[1]);
...

关于c - 为二维数组中的每一项存储一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316163/

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