2010-10-23 10 views
5

में एक समय में एक शब्द वापस करें। यह कोड सफेद स्थान को छोड़ने और एक समय में एक शब्द को वापस करने वाला माना जाता है। इस कोड पर कुछ प्रश्न: जब कोड * शब्द ++ = c पर मिलता है; लाइन मुझे कोर डंप मिलता है। क्या मैंने इस रेखा को सही ढंग से लिखा है? और सही वापस आ गया है। और क्या मुझे किसी शब्द को संग्रहीत करने के लिए स्मृति आवंटित करने की आवश्यकता है?सफेद स्थान छोड़ें और सी

//get_word 

int get_word(char *word,int lim){ 
int i=0; 
int c; 
int quotes=0; 
int inword = 1; 

while(
     inword && 
     (i < (lim-1)) && 
     ((c=getchar()) != EOF) 
    ){ 

    if(c==('\"')){//this is so i can get a "string" 
    if (quotes) { 
     inword = 0; 
    } 
    quotes = ! quotes; 
    } 
    else if(quotes){ //if in a string keep storing til the end of the string 
    *word++=c;//pointer word gets c and increments the pointer 
    i++; 
    } 
    else if(!isspace(c)) {//if not in string store 
    *word++=c; 
    i++; 
    } 
    else { 
    // Only end if we have read some character ... 
    if (i) 
     inword = 0; 
    } 
} 
*word='\0';       //null at the end to signify 
return i;        //value 

}

उत्तर

2

यह बताने के लिए क्यों इस कोर कोड कि get_word कॉल देखे बिना उदासीनता असंभव है। आपके द्वारा नामित लाइन पर विफलता का तात्पर्य है कि आप इसे पहले पैरामीटर में कुछ अमान्य कर रहे हैं। उस रेखा के साथ और अपने आप में कुछ भी गलत नहीं है, लेकिन यदि word आपके आउटपुट वर्णों को पकड़ने के लिए पर्याप्त रूप से लिखने योग्य स्मृति को इंगित नहीं करता है, तो आप परेशानी में हैं।

इसे पकड़ने के लिए स्मृति आवंटित करने के बारे में आपके प्रश्न का उत्तर हाँ है - हालांकि यह स्थानीय हो सकता है (उदाहरण के लिए कॉलर के स्थानीय चर, वैश्विक, या ढेर-आधारित (जैसे char * wordHolder = malloc(wordLimit);) में एक चार सरणी। तथ्य यह है कि आप हैं यह पूछने का समर्थन करता है कि आपका पैरामीटर 1 मान समस्या है।

+0

क्या आपको दिमाग होगा यदि मैं 'malloc' के वापसी मूल्य से कास्ट हटा देता हूं? –

+0

@R .., इसके बिना मुझे' malloc 'के बाद संकलन त्रुटि मिलती है 'रिटर्न' शून्य * ': त्रुटि C2440: 'प्रारंभ करना': 'शून्य *' से 'char *' में कनवर्ट नहीं किया जा सकता है 'शून्य *' से रूपांतरण 'पॉइंटर से गैर-'void' में एक स्पष्ट कास्ट की आवश्यकता होती है" –

+0

@Steve: फिर आप शायद सी कोड संकलित करने के लिए सी ++ कंपाइलर का उपयोग कर रहे हैं :) – fredoverflow

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