在C中创建多维字符数组

6g8kf2rb  于 2023-03-17  发布在  其他
关注(0)|答案(5)|浏览(219)

我正在处理一个关于多维char数组的问题。在一段时间后,我很难记住所有的。尝试找出我做错了什么。平台是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);
}
rryofs0p

rryofs0p1#

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

const char *b[] = { a1, a2 };  // char *b[2] = { a1, a2 } would also work

所以你需要的并不是数组的数组,而只是一个标准的一维数组。
还要注意我添加了const修饰符,使其成为指向常量字符的指针数组,这是因为不允许修改文本字符串,所以所有指向它们的指针都应该是常量。
如果你真的想要一个数组的数组,比如说你可以修改字符串,你首先需要确保维数是正确的,你有两个字符串,所以你需要一个两个元素的数组,然后你需要第二个“维数”足够大,以容纳字符串和你可能需要做的所有可能的加法。
例如:

char b[2][32];  // Two arrays of 32 characters each

但是要注意,你不能用指针初始化这些数组,甚至不能用其他数组,而是必须显式地将字符串复制到数组中:

strcpy(b[0], a1);
strcpy(b[1], a2);
hmae6n7t

hmae6n7t2#

指针数组不是二维数组。
此函数定义并初始化2D char数组:

char b[][7] = {"Hello1", "Hello2"};
qzlgjiam

qzlgjiam3#

更正为

char *b[] ={a1,a2};

更正代码

#include<stdio.h>
int main()
{
    char *a1="hello1";
    char *a2="hello2";
    char *b[] ={a1,a2};
    printf("%s\n",b[0]);
    getchar();
    return(0);
}
sg2wtvxw

sg2wtvxw4#

也是一种方式:

#include <stdio.h>
#include <string.h>
    
int main() 
{
    char **matrix;
    int i = 0;

    matrix = malloc(sizeof(char *) * 3);
    matrix[0] = strdup("hello");
    matrix[1] = strdup("world");
    matrix[2] = NULL;

    while(matrix[i] != NULL)
    {
        printf("%s\n", matrix[i]);
        free(matrix[i]);
        i++;
    }
    free(matrix);
}
vfh0ocws

vfh0ocws5#

又是我

char d1[]="hello World";//This syntax is true
char *d2="Hello World";// This is another appearance of previous line
char *a1="hello1";
char *a2="hello2";
char *c1[] ={a1,a2}; //This line is also working
char **c2={a1,a2};   /*Right part of the assignment operator is data.
Can we assing data to c2 like this, I am a little confused. Is that correct*/

多谢协助

相关问题