Инициализация массива двумерных символов в C - PullRequest
7 голосов
/ 06 июля 2011

Я пытаюсь составить список строк, которые мне нужно передать функции, ожидающей char **

Как мне построить этот массив?Я хочу передать два параметра, каждый из которых содержит менее 100 символов.

char **options[2][100];

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

Это не компилируется.Что я делаю не так точно?Как мне создать двумерный массив символов в C?

Ответы [ 4 ]

22 голосов
/ 06 июля 2011

C-строки заключены в двойные кавычки:

const char *options[2][100];

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

Перечитайте ваш вопрос и комментарии, хотя я предполагаю, что вы действительно хотите сделать следующее:

const char *options[2] = { "test1", "test2" };
9 голосов
/ 01 октября 2013

Как создать массив размером 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

Как создать 2D-массив, содержащий указатели на символы:

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.

Как создать указатель на 2D-массив символов:

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/

4 голосов
/ 06 июля 2011
char **options[2][100];

объявляет массив размера 2 с массивами указателей размера 100 на указатели на char. Вы хотите удалить один *. Вы также захотите поместить строковые литералы в двойные кавычки.

1 голос
/ 06 июля 2011

Я думаю, что изначально вы хотели создать массив только из символов, а не из указателей:

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");

Приведенный выше код демонстрирует два различных способа установки значений символов в памяти, которые вы откладывали для хранения символов.

...