2012-05-24 13 views
12
#include <stdio.h> 
int main(void) 
{ 
    int i,j,k; 
    char st; 
    printf("enter string\n"); 
    scanf("%s", st); 
    printf("the entered string is %s\n", st); 
} 

कार्यक्रम ऊपर संकलन मुझे एक चेतावनी देता है तर्क की उम्मीद है?प्रारूप '% s' प्रकार के 'चार *'

यह जब मैं इसे चलाने के क्या होता है:

$ ./a.out 
enter string 
kiaaa 
the entered string is (null) 

संपादित करें:

#include <stdio.h> 
int main(void) 
{ 
    int i,j,k; 
    char *st; 
    printf("enter string\n"); 
    scanf("%s", st); 
    printf("the entered string is %s\n", st); 
} 

हालांकि:

यहाँ कोड (char *st में char st; बनाया) का एक और संस्करण है , यह रनटाइम पर समान व्यवहार करता है।

+0

काम करेगा अब आपका 'char * st;' एक अनियंत्रित सूचक है। आप नहीं जानते कि यह कहां इंगित करता है। 'स्कैनफ'' में इसे एक्सेस करना अपरिभाषित व्यवहार है। आपको इसे वैध स्मृति के पर्याप्त बड़े हिस्से को इंगित करना होगा। या तो एक सरणी 'char st [100] घोषित करें; '- सरणी नाम को' स्कैनफ़' या 'printf'' के तर्क के रूप में पारित होने पर पॉइंटर में परिवर्तित किया जाता है, तो यह ठीक है - या इसे पॉइंटर के रूप में घोषित करें, जैसा कि आपके पास है, और कुछ स्मृति आवंटित करें, 'st = malloc (100 * sizeof * st); इसका उपयोग करने से पहले। आपको 'malloc' के लिए '#' शामिल करना होगा, और जांचें कि 'malloc'' NULL' लौटा है या नहीं। –

उत्तर

8

char st का उपयोग कर

आप एक सरणी की जरूरत है एक एकल चरित्र है। अपने कोड के बाकी के द्वारा परखने के बाद, आप शायद पात्रों में से एक सरणी की घोषणा करने का इरादा: की तरह char st[50]

char st[80]; 
1

आपके पास एक प्रकार का गलत मिलान है।
scanf सुरक्षित प्रकार नहीं है, आपको उचित प्रकार प्रदान करने की आवश्यकता है। scanf आपको इनपुट से डेटा प्राप्त करने में सक्षम बनाता है और आपको यह बताना होगा कि वह डेटा किस प्रकार है जिसे आप पढ़ना चाहते हैं। आप इसे एक वर्ण चर के साथ %s निर्दिष्ट करके एक स्ट्रिंग को पढ़ने के लिए कहते हैं।

#define MAX_LENGTH 256 
char st[MAX_LENGTH]; 

@Jerry ठीक ही बताते हैं के रूप में, आप का उपयोग करके केवल साधारण से बचने के सभी परेशानी कर सकते हैं::)
getline ( बजाय scanf

+2

... और फिर जब आप 'स्कैनफ़'' कहते हैं तो अधिकतम लंबाई निर्दिष्ट करें - जैसा कि '% 255s' जैसी चीज़ के बजाय केवल'% s' के साथ कॉल लगभग 'होट' कॉल करने के बराबर है। –

+0

@ जेरीकॉफिन: अच्छी तरह से, ध्यान दिया। धन्यवाद –

+1

यह निश्चित रूप से यह नहीं था कि कोई भी 'होट' (कभी भी) का उपयोग करे! –

-1

उपयोग char *st; या सरणी जब आप चार सूचक का उपयोग पूरा, आप द्वारा प्रयुक्त स्मृति पुनःआवंटन चाहिए सूचक। यह free(st); फ़ंक्शन का उपयोग करके किया जा सकता है।

संपादित करें: यदि आप स्ट्रिंग प्रिंट कर रहे हैं और यदि आप सूचक का उपयोग कर रहे हैं, आप कर सकते हैं की तरह:

printf("the entered string is %s\n",st); 
printf("the entered string is %s\n",*st); // This will work in both cases if you use char *st or char st[50] 
+1

यदि आप 'char *' की अनुशंसा करने जा रहे हैं, तो कृपया आवंटित/मुक्त स्मृति के लिए भी एक तरीका सुझाएं। – NPE

+0

यदि मैं इसे char * सेंट की तरह उपयोग करता हूं तो प्रिंट करने के लिए मुझे इसके लिए कैसे जाना चाहिए? 'char * st; printf ("स्ट्रिंग दर्ज करें \ n"); स्कैनफ ("% s", सेंट); printf ("दर्ज स्ट्रिंग% s \ n", * सेंट) है; ' –

+0

@ रजिस्टर्ड यूज़र: अपने समाधान के साथ आगे बढ़ें। या आप printf का उपयोग भी कर सकते हैं ("दर्ज स्ट्रिंग% s \ n", सेंट) है; –

0

सेंट चार के प्रकार है & सेंट चार के प्रकार * अंतर का ख्याल लो है। बीटीडब्ल्यू, स्ट्रिंग को स्टोर करने के लिए केवल एक char का उपयोग नहीं किया जा सकता है। चार [] सरणी का प्रयोग करें।

1

scanf को एक स्ट्रिंग स्कैन करने के संकेत देने के लिए char* पर पॉइंटर की आवश्यकता है।

आप स्टैक पर आवंटित एक चरित्र की आपूर्ति कर रहे हैं।

आप या तो getchar() का उपयोग करना चाहते हैं या st एक चार सरणी बनाना चाहते हैं।

बदलें char st;char st[10]; करने के लिए या जो कुछ भी आकार सरणी आप चाहते हैं:

0

दूसरों का उल्लेख किया है के रूप में आप एक सरणी बनाना चाहते हैं।

उपर्युक्त परिवर्तन st एक सरणी है जिसमें 10 अलग-अलग तत्व होते हैं जो एक एकल मान मान रख सकते हैं।

0

चार सेंट यह यानी एक चरित्र केवल एक वर्ण का संग्रह किया जायेगा इस main() char st [100]; scanf("%s",st); है जैसे कि यह कोशिश केवल इन तीन लाइनों को बदलने और यह काम करेगा यह केवल एक शब्द तार यहाँ सिवाय होगा आप एक पूर्णांक के रूप में समारोह की घोषणा कर दी है कि int मुख्य() इसे मुख्य() के रूप में रखता है और यह

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