我正在处理一个关于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)
因为a1和a2是指针,所以您需要一个指针数组来包含它们:
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)