C中的二维字符数组初始化

Posted

技术标签:

【中文标题】C中的二维字符数组初始化【英文标题】:2D character array initialization in C 【发布时间】:2011-09-29 19:01:54 【问题描述】:

我正在尝试构建一个字符串列表,我需要将这些字符串传递给期望 char ** 的函数

如何构建这个数组?我想传入两个选项,每个选项少于 100 个字符。

char **options[2][100];

options[0][0] = 'test1';
options[1][0] = 'test2';

这不会编译。我到底在做什么错?如何在 C 中创建二维字符数组?

【问题讨论】:

char **options[2][100] 是一个数组 [2][100] 指向字符指针的指针。 【参考方案1】:

C 字符串用双引号括起来:

const char *options[2][100];

options[0][0] = "test1";
options[1][0] = "test2";

重新阅读你的问题和 cmets 虽然我猜你真正想要做的是:

const char *options[2] =  "test1", "test2" ;

【讨论】:

这与 larsmans 的回答相同。但是,似乎我的函数仍在抱怨我没有通过 char** 编辑您的问题,使其包含您尝试将此数组传递给的函数。 如果我想为上面的二维数组动态分配内存。我怎样才能做到这一点..? @PaulR char (*str)[5] = malloc(sizeof(*str)*2); str[0][1] = "abcd";我是这样做的。但是编译器会抛出一个错误。!!!!!! @PaulR @ranaarjun:您应该发布一个新问题,详细描述您的问题【参考方案2】:
char **options[2][100];

声明一个大小为 100 的指针数组的大小为 2 的数组,这些指针指向指向 char 的指针。您需要删除一个*。您还需要将字符串文字放在双引号中。

【讨论】:

在传递给寻找 char** 的函数时,我是否需要取消引用这个或其他东西?现在它抱怨 char*[2][100] 不是一个有效的论点 @Derek: 你不能将options 传递给这样的函数,但是你可以在0,1 中将options[i] 传递给i【参考方案3】:

我认为您最初的意思是创建一个仅包含字符而不是指针的数组:

char options[2][100];

options[0][0]='t';
options[0][1]='e';
options[0][2]='s';
options[0][3]='t';
options[0][4]='1';
options[0][5]='\0';  /* NUL termination of C string */

/* A standard C library function which copies strings. */
strcpy(options[1], "test2");

上面的代码显示了两种不同的方法来设置您为包含字符而预留的内存中的字符值。

【讨论】:

这也可以,因为一切都是文字:char options[2][100] = "test1", "test2";【参考方案4】:

如何创建包含字符指针的大小为 5 的数组:

char *array_of_pointers[ 5 ];        //array size 5 containing pointers to char
char m = 'm';                        //character value holding the value 'm'
array_of_pointers[0] = &m;           //assign m ptr into the array position 0.
printf("%c", *array_of_pointers[0]); //get the value of the pointer to m

如何创建指向字符数组的指针:

char (*pointer_to_array)[ 5 ];        //A pointer to an array containing 5 chars
char m = 'm';                         //character value holding the value 'm'
*pointer_to_array[0] = m;             //dereference array and put m in position 0
printf("%c", (*pointer_to_array)[0]); //dereference array and get position 0

如何创建一个包含字符指针的二维数组:

char *array_of_pointers[5][2];          
//An array size 5 containing arrays size 2 containing pointers to char

char m = 'm';                           
//character value holding the value 'm'

array_of_pointers[4][1] = &m;           
//Get position 4 of array, then get position 1, then put m ptr in there.

printf("%c", *array_of_pointers[4][1]); 
//Get position 4 of array, then get position 1 and dereference it.

如何创建指向二维字符数组的指针:

char (*pointer_to_array)[5][2];
//A pointer to an array size 5 each containing arrays size 2 which hold chars

char m = 'm';                            
//character value holding the value 'm'

(*pointer_to_array)[4][1] = m;           
//dereference array, Get position 4, get position 1, put m there.

printf("%c", (*pointer_to_array)[4][1]); 
//dereference array, Get position 4, get position 1

为了帮助您了解人类应该如何阅读复杂的 C/C++ 声明,请阅读以下内容:http://www.programmerinterview.com/index.php/c-cplusplus/c-declarations/

【讨论】:

以上是关于C中的二维字符数组初始化的主要内容,如果未能解决你的问题,请参考以下文章

c语言学习--数组

C-二维数组, 字符串, 指针

C语言中,对于不知道长度的数组怎样输入。。。

c语言二维数组如何初始化

C语言 - 数组

C语言的数据类型——数组