2010-02-24 17 views
9

का उपयोग करके मैं scanf का उपयोग करके इनपुट पढ़ने की कोशिश कर रहा हूं और char *dynamically as specified by GCC manual में संग्रहीत कर रहा हूं, लेकिन यह संकलन समय त्रुटि दे रहा है।डायनामिक स्ट्रिंग इनपुट - स्कैनफ ("% as")

char *string; 
    if (scanf ("%as",&string) != 1){ 
    //some code 
    } 
    else{ 
    printf("%s\n", *string); 
    free(string); 
    //some code 
    } 

उत्तर

11

a संशोधक scanf को अगर आप -std=c99 ध्वज के साथ संकलन कर रहे हैं काम नहीं करेगा उपयोग कर सकते हैं; सुनिश्चित करें कि आप इसका उपयोग नहीं कर रहे हैं।

यदि आपके पास ग्लिबैक का कम से कम संस्करण 2.7 है, तो आप a के स्थान पर m संशोधक का उपयोग कर सकते हैं और इसका उपयोग करना चाहिए।

इसके अलावा, बफर को मुक्त करना आपकी ज़िम्मेदारी है।

+0

'-ansi' या '--std = c98' के साथ संकलित स्कैनफ ("% as") के साथ काम करता है। –

+2

'एम' फ्लैग पर कुछ पृष्ठभूमि, क्योंकि जीसीसी/ग्लिबैक दस्तावेज़ों का उल्लेख नहीं है: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

' एक 'संशोधक, पास-डी_जीएनयू_SOURCE जीसीसी में, लेकिन निश्चित रूप से बेहतर' एम' का उपयोग करें। – amc

0

मैं जीसीसी के साथ सीमित अनुभव प्राप्त हुआ है, लेकिन मैं scanf के लिए एक %a संशोधक कभी नहीं देखा। क्या आपने %a को %s के साथ प्रदान की गई तीसरी पंक्ति में बदलने की कोशिश की है?

+0

कृपया दिए गए लिंक का संदर्भ लें। एफवाईआई% सी केवल 1 char स्टोर करता है। मैं 0-9 ए-जेए-जेड वर्णों की पूरी स्ट्रिंग को संग्रहीत करने के लिए गतिशील रूप से स्मृति आवंटित करने का प्रयास कर रहा हूं। –

+0

मुझे पता है कि '% सी' क्या करता है - मुझे बस उस बिट को याद आया। क्या होता है जब आप '% s' के बजाय '% s' का उपयोग करते हैं? –

+2

% s काम करेगा यदि आपके पास पहले से ही आवंटित स्मृति है। जबकि% (ध्वज के साथ) आवश्यक स्मृति को * वेरिएबल को आवंटित करता है जिसे बाद में मुक्त किया जा सकता है() –

1

क्या आपके पास जीएनयू एक्सटेंशन सक्षम हैं? मानक सी में a संशोधक नहीं है। यदि -ansi या -std=c89 ध्वज सक्षम किया गया है

0

scanf("%as") साथ 'गतिशील स्ट्रिंग इनपुट' काम करेंगे।
संकलित gcc -ansi

का उपयोग कर या फिर आप scanf("%ms")

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