Intereting Posts
Ошибка LNK1561: точка входа должна быть определена Как преобразовать оператор IF с 2 переменными в функцию переключения с помощью C? Что блокирует установку драйвера в Windows? Взаимодействие массивов Swift с C? указатель движения. почему цифры настолько высоки? почему он печатает информацию в блоках, а не постоянный stream? Составляют ли компиляторы лучший код для циклов do-while и других типов? Int в правило преобразования символов в C, когда int находится вне диапазона char «Доступ к определению места нарушения доступа 0x000000000» в простом приложении OpenGL Перемешивание массива при создании каждого индекса имеет ту же вероятность быть в любом индексе Добавление ключевого слова const в массив, переданный как параметр для функции Когда / Почему «\ 0» необходимо отметить конец массива (char)? MIPS Assembly – Массивы? fgets не читает целую строку Поиск размера файла, созданного fmemopen указатель на строки

Как создать массив строк в C?

Я учу себя C из книги, и я пытаюсь создать кроссворд. Мне нужно создать массив строк, но у вас все проблемы. Кроме того, я мало знаю о массиве …

Это часть кода:

char word1 [6] ="fluffy", word2[5]="small",word3[5]="bunny"; char words_array[3]; /*This is my array*/ char *first_slot = &words_array[0]; /*I've made a pointer to the first slot of words*/ words_array[0]=word1; /*(line 20)Trying to put the word 'fluffy' into the fist slot of the array*/ 

Но я продолжаю получать сообщение:

 crossword.c:20:16: warning: assignment makes integer from pointer without a cast [enabled by default] 

Не уверен, в чем проблема … Я попытался найти, как сделать массив строк, но не повезло

Любая помощь будет высоко ценится,

Сэм

 words_array[0]=word1; 

word_array[0]char , а word1char * . Ваш персонаж не может содержать адрес.

Массив строк может выглядеть так:

 char array[NUMBER_STRINGS][STRING_MAX_SIZE]; 

Если вы предпочитаете массив указателей на ваши строки:

 char *array[NUMBER_STRINGS]; 

А потом:

 array[0] = word1; array[1] = word2; array[2] = word3; 

Может быть, вы должны это прочитать.

Декларация

 char words_array[3]; 

создает массив из трех символов . Кажется, вы хотите объявить массив указателей символов:

 char *words_array[3]; 

Однако у вас есть более серьезная проблема. Декларация

 char word1 [6] ="fluffy"; 

создает массив из шести символов, но вы на самом деле говорите, что он имеет семь символов. Все строки имеют дополнительный символ, '\0' , который используется для указания конца строки.

Либо объявите массив размером 7:

 char word1 [7] ="fluffy"; 

или оставить размер вне, и компилятор сам это выяснит:

 char word1 [] ="fluffy"; 

Если вам нужен массив строк. Существует два способа:

1. Двумерный массив символов

В этом случае вам нужно заранее знать размер ваших строк. Он выглядит следующим образом:

 // This is an array for storing 10 strings, // each of length up to 49 characters (excluding the null terminator). char arr[10][50]; 

2. Массив указателей символов

Он выглядит следующим образом:

 // In this case you have an array of 10 character pointers // and you will have to allocate memory dynamically for each string. char *arr[10]; // This allocates a memory for 50 characters. // You'll need to allocate memory for each element of the array. arr[1] = malloc(50 *sizeof(char)); 

Вы также можете использовать malloc() для распределения памяти вручную:

 int N = 3; char **array = (char**) malloc((N+1)*sizeof(char*)); array[0] = "fluffy"; array[1] = "small"; array[2] = "bunny"; array[3] = 0; 

Если вы не знаете заранее (во время кодирования), сколько строк будет в массиве и насколько они будут длительными, это путь. Но вам придется освобождать память, когда она больше не используется (call free() ).