2010-11-16 14 views
6

मैं सी में structs के बारे में जानने की कोशिश कर रहा हूँ, लेकिन मुझे समझ नहीं आता क्यों मैं अपने उदाहरण मैं के रूप में शीर्षक असाइन नहीं कर सकते:सी 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; 
} 

त्रुटि संदेश:

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

उत्तर

9

एलएचएस एक सरणी है, आरएचएस एक सूचक है। सरणी में बाएं-बाइट डालने के लिए आपको strcpy का उपयोग करने की आवश्यकता है।

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

देखभाल है कि आप स्रोत डेटा> 99 बाइट्स लंबे यहाँ नकल नहीं है आप एक स्ट्रिंग-सांत अशक्त ('\ 0') चरित्र के लिए स्थान की आवश्यकता के रूप में ले लो। फिर से अपने मूल कोड में

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

देखो और देखो अगर यह अब और अधिक समझ में आता है:

संकलक में बताने के लिए क्या कुछ विस्तार से गलत था कोशिश कर रहा था।

+0

धन्यवाद, "# शामिल करें " प्रोग्राम संकलित करता है और अपेक्षा के अनुसार काम करता है। मैंने पाया है कि सभी उदाहरण स्कैनफ का उपयोग कर रहे हैं या स्ट्रिंग को भरने के लिए मिलता है, और यह अब मुझे समझ में आता है। –

+0

धन्यवाद पीटर। मैं 'strncpy' विकल्पों पर विचार करता हूं, जब तक कि आप सुनिश्चित न हों कि आपका इनपुट डेटा हमेशा फिट होने के लिए पर्याप्त छोटा होगा। –

+0

हालांकि स्ट्रिंग्सएच सहित आपके कार्यान्वयन पर काम हो सकता है, आपको वास्तव में strcpy घोषित करने के लिए string.h शामिल होना चाहिए। –

6

जैसा कि संदेश कहता है, मुद्दा यह है कि आप असंगत प्रकार असाइन करने की कोशिश कर रहे हैं: char* और char[100]। आप strncpy की तरह एक समारोह का उपयोग करने के 2

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

'sizeof (my_library.title) -1', नहीं? –

+0

@ ओली, वास्तव में। मानसिक रूप से साइट पर खुद को smacked। – JaredPar

1

चार * और चार [100] विभिन्न प्रकार हैं बीच डेटा की प्रतिलिपि की जरूरत है।

आप उन चार तत्वों को .title buffer के अंदर कॉपी करना चाहते हैं।

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

title एक चरित्र सरणी है - इन सी का प्रयोग करें strcpy(3) में आबंटित नहीं हैं।

संबंधित मुद्दे