2010-11-16 37 views
6

Sto cercando di conoscere le strutture in C, ma io non capisco perché non posso assegnare il titolo come ho il mio esempio:C problema struct

#include <stdio.h> 

struct book_information { 
char title[100]; 
int year; 
int page_count; 
}my_library; 


main() 
{ 

my_library.title = "Book Title"; // Problem is here, but why? 
my_library.year = 2005; 
my_library.page_count = 944; 

printf("\nTitle: %s\nYear: %d\nPage count: %d\n", my_library.title, my_library.year, my_library.page_count); 
return 0; 
} 

messaggio di errore:

books.c: In function ‘main’: 
books.c:13: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’ 

risposta

9

LHS è un array, RHS è un puntatore. È necessario utilizzare strcpy per inserire i byte indicati nell'array.

strcpy(my_library.title, "Book Title"); 

Fare attenzione a non copiare i dati sorgente> 99 byte lungo qui come avete bisogno di spazio per una stringa Null-terminazione ('\ 0') carattere.

Il compilatore stava cercando di dirvi che cosa era sbagliato nel dettaglio:

error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’

Guardate il vostro codice originale di nuovo e vedere se questo ha più senso ora.

+0

Grazie, dopo aver aggiunto "#include ", il programma viene compilato e funziona come previsto. Tutti gli esempi che ho trovato, hanno usato scanf o sono riusciti a riempire le stringhe, e questo per me ha senso. –

+0

Grazie Peter. Prenderò in considerazione le alternative 'strncpy', a meno che tu non sia sicuro che i tuoi dati di input saranno sempre abbastanza piccoli da adattarsi. –

+0

Sebbene comprenda che strings.h può funzionare sulla tua implementazione, dovresti includere string.h per dichiarare strcpy. –

6

Come dice il messaggio, il problema è che si sta tentando di assegnare tipi incompatibili: char* e char[100]. È necessario utilizzare una funzione come strncpy per copiare i dati tra il 2

strncpy(my_library.title, "Book Title", sizeof(my_library.title)); 
+2

'sizeof (my_library.title) -1', no? –

+0

@ Oli, infatti. Mi ha colpito mentalmente per il sito. – JaredPar

1

char * e char [100] sono diversi tipi.

Si desidera copiare questi elementi char all'interno del buffer .title.

strncpy(my_library.title, "Book Title", sizeof(my_library.title)); 
3

title è un array di carattere - queste non sono assegnabili in C. Uso strcpy(3).