在 C 中创建多维 char 数组

syn*_*sis 0 c

我正在处理一个关于charC 中多维数组的问题。休息一段时间后,我很难记住所有内容。试着找出我做错了什么。平台是Ubuntu 21.10,编译器是gcc,代码如下。任何帮助我将不胜感激。

#include <stdio.h>

int main() {
    char *a1 = "hello1";
    char *a2 = "hello2";
    char b[][2] = { a1, a2 };
    printf("%s\n", b[1]);
    getchar();
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

因为a1a2指针,所以您需要一个指针数组来包含它们:

const char *b[] = { a1, a2 };  // char *b[2] = { a1, a2 } would also work
Run Code Online (Sandbox Code Playgroud)

因此,您需要的并不是真正的数组数组,而只是一个标准的单个一维数组。

另请注意,我添加了const修饰符,使其成为指向常量字符的指针数组。这是因为不允许修改文字字符串,因此所有指向它们的指针都应该保持不变。


例如,如果您确实想要一个数组数组,以便能够修改字符串,那么首先需要确保尺寸正确。您有两个字符串,因此需要一个包含两个元素的数组。然后,您需要第二个“维度”足够大,以容纳字符串以及您可能需要执行的所有可能的添加操作。

例如:

char b[2][32];  // Two arrays of 32 characters each
Run Code Online (Sandbox Code Playgroud)

但请注意,您无法使用现有的指针甚至使用其他数组来初始化这些数组。相反,您必须显式地将字符串复制到数组中:

strcpy(b[0], a1);
strcpy(b[1], a2);
Run Code Online (Sandbox Code Playgroud)