2013-03-01 19 views
7

Uczę się C z książki i próbuję stworzyć krzyżówkę. Muszę utworzyć tablicę łańcuchów, ale wciąż mam problemy. Ponadto, nie wiem zbyt wiele o tablicy ...Jak utworzyć tablicę ciągów w C?

To jest kawałek kodu:

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*/ 

ale wciąż otrzymuję komunikat:

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

Nie wiesz, co to jest problem ... Próbowałem sprawdzić, jak utworzyć tablicę łańcuchów, ale bez powodzenia

Każda pomoc będzie doceniana,

Sam

+0

spróbuj uczyć się nieco więcej o tablicach http://pw1.netcom.com/~tjensen/ptr/pointers.htm. –

+0

Przy okazji - 'char word1 [6] =" puszysty "' - "puszysty" to właściwie 7 znaków. W języku C łańcuch jest kończony znakiem '\ 0', który zajmuje jedną dodatkową postać. – ArjunShankar

+2

'const char * arr [] = {" literal "," string "," pointer "," array "};' i zanotuj ** const **. – WhozCraig

Odpowiedz

11
words_array[0]=word1; 

word_array[0] jest char, natomiast word1 jest char *. Twoja postać nie jest w stanie utrzymać adresu.

Tablica ciągów znaków może wyglądać to:

char array[NUMBER_STRINGS][STRING_MAX_SIZE]; 

Jeśli raczej chcą tablicę wskaźników do strun:

char *array[NUMBER_STRINGS]; 

, a następnie:

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

Może powinieneś przeczytać this.

+0

Dzięki banda kirilenko !! – Wobblester

7

Deklaracja

char words_array[3]; 

tworzy tablicę trzech znaków. Wydaje się, chcą zadeklarować tablicę znaków wskaźników:

char *words_array[3]; 

mieć bardziej poważny problem, choć. Deklaracja

char word1 [6] ="fluffy"; 

tworzy tablicę sześć postaci, ale tak naprawdę powiedzieć to mieć siedem charakter. Wszystkie łańcuchy mają dodatkowy znak, '\0', który służy do informowania o końcu ciągu.

Albo zadeklarować tablicę być wielkości siódmy:

char word1 [7] ="fluffy"; 

lub pozostawić rozmiar, i kompilator będzie zrozumieć to sam:

char word1 [] ="fluffy"; 
+0

Ohh ok dzięki – Wobblester

5

Jeśli potrzebujesz tablicę smyczki.Istnieją dwa sposoby:

1. Dwuwymiarowa tablica znaków

W tym przypadku trzeba będzie znać rozmiar swoimi strunami wcześniej. To wygląda jak poniżej:

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

2. tablicę wskaźników znaków

to wygląda jak poniżej:

// 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)); 
4

Można również użyć malloc() przydzielić pamięci ręcznie:

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

Jeśli nie masz z wyprzedzeniem (w czasie kodowania), ile łańcuchów będzie w tablicy i jak długo będą one długie, to jest droga. Ale musisz zwolnić pamięć, gdy nie jest już używana (zadzwoń pod numer free()).

Powiązane problemy