2013-03-01 21 views
7

Mi sto insegnando C da un libro e sto cercando di creare un cruciverba. Devo creare una serie di stringhe ma continuare a incorrere in problemi. Inoltre, io non ne so molto di gamma ...Come creare un array di stringhe in C?

Questo è il pezzo di codice:

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

Ma io continuo a ricevere il messaggio:

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

Non so cosa sia il problema ... Ho provato a cercare come creare una serie di stringhe ma senza fortuna

Qualsiasi aiuto sarà molto apprezzato,

Sam

+0

prova a studiare un po 'di più sugli array http://pw1.netcom.com/~tjensen/ptr/pointers.htm. –

+0

A proposito - 'char word1 [6] =" fluffy "' - "fluffy" è in realtà 7 caratteri. In C, una stringa termina con un '\ 0' - che occupa un carattere in più. – ArjunShankar

+2

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

risposta

11
words_array[0]=word1; 

word_array[0] è un char, mentre word1 è un char *. Il tuo personaggio non è in grado di contenere un indirizzo.

Un array di stringhe potrebbe apparire come:

char array[NUMBER_STRINGS][STRING_MAX_SIZE]; 

Se invece volete un array di puntatori per le corde:

char *array[NUMBER_STRINGS]; 

E poi:

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

Forse dovresti leggere this.

+0

Grazie mille kirilenko !! – Wobblester

7

La dichiarazione

char words_array[3]; 

crea un array di tre personaggi . Si sembrano voler dichiarare un array di caratteri puntatori:

char *words_array[3]; 

Hai un problema più serio però. La dichiarazione

char word1 [6] ="fluffy"; 

crea un array di sei caratteri, ma in realtà dire che per avere sette carattere. Tutte le stringhe hanno un carattere aggiuntivo, '\0', utilizzato per indicare la fine della stringa.

In entrambi i dichiarare la matrice ad essere di dimensioni sette:

char word1 [7] ="fluffy"; 

o lasciare le dimensioni, e il compilatore capirlo da solo:

char word1 [] ="fluffy"; 
+0

Oh ok ok grazie – Wobblester

5

Se avete bisogno di una serie di stringhe.Ci sono due modi: Array

1. Due dimensionale di caratteri

In questo caso, si dovrà conoscere la dimensione delle corde in anticipo. Sembra che qui di seguito:

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

2. Un array di puntatori carattere

Sembra che qui di seguito:

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

È inoltre possibile utilizzare malloc() per allocare la memoria manualmente:

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

Se non lo fai sapere in anticipo (al momento della codifica) quante stringhe saranno in un array e quanto saranno lunghe, questa è una strada da percorrere. Ma dovrai liberare la memoria quando non sarà più utilizzata (chiama free()).

Problemi correlati