2010-11-16 17 views
6

Ich versuche, über structs in C zu lernen, aber ich verstehe nicht, warum ich nicht den Titel, wie ich mein Beispiel zuordnen:C struct Problem

#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; 
} 

Fehlermeldung:

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

Antwort

9

LHS ist ein Array, RHS ist ein Zeiger. Sie müssen strcpy verwenden, um die spitzen Bytes in das Array zu setzen.

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

Achten Sie darauf, dass Sie Quelldaten> 99 Bytes nicht lange hier kopieren, wie Sie Platz für ein String-terminierenden Null (‚\ 0‘) Zeichen benötigen.

Der Compiler wurde versucht, Ihnen zu sagen, was im Detail falsch war:

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

Sehen Sie sich Ihren ursprünglichen Code wieder und sehen, ob dies nun mehr Sinn macht.

+0

Danke, nach dem Hinzufügen von "# include " das Programm kompiliert und funktioniert wie erwartet. Alle Beispiele, die ich gefunden habe, haben scanf benutzt oder bekommen, um die Zeichenfolgen zu füllen, und das macht für mich jetzt Sinn. –

+0

Danke Peter. Ich würde die 'strncpy'-Alternativen in Betracht ziehen, außer Sie sind sicher, dass Ihre Eingabedaten immer klein genug sind, um zu passen. –

+0

Auch wenn strings.h möglicherweise an Ihrer Implementierung arbeitet, sollten Sie strcpy unbedingt mit string.h deklarieren. –

6

Wie in der Meldung angezeigt wird, versuchen Sie, inkompatible Typen zuzuweisen: char* und char[100]. Sie müssen eine Funktion wie strncpy verwenden, um die Daten zwischen dem 2

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

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

+0

@Oli, tatsächlich. Geistig schlug ich mich für die Über-Seite. – JaredPar

1

char * und char [100] verschiedene Arten sind zu kopieren.

Sie möchten diese Zeichenelemente in den .title-Puffer kopieren.

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

title ist ein Zeichenarray - das in C. Verwendung nicht zuweisbar sind strcpy(3).