2012-11-14 14 views
6

से लौटने के बाद NULL भेजता है मैं अपने कोड सब कुछ में एक ही समारोह बुला नहीं कर रहा हूँ जब अच्छी तरह से काम करता है, लेकिन जब चर pch अचानक एक प्रत्यावर्तन से समारोह रिटर्न शून्य है:ग strtok प्रत्यावर्तन

void someFunction() 
    { 
     char * pch; 
     char tempDependencies[100*64+100]; 
     strcpy(tempDependencies,map[j].filesNeeded); 
     pch = strtok(tempDependencies,","); 
     while (pch != NULL) 
     { 
      someFunction(); <- if i comment this out it works fine 
      pch = strtok (NULL, ","); 
     } 
     } 

तो के लिए उदाहरण के लिए जब लूप स्ट्रिंग file2,file3,file4 पर कार्य करता है तो यह सही ढंग से file2 विभाजित करता है और स्ट्रिंग को file2\\000file3,file4 में संशोधित करता है लेकिन pch = strtok (NULL, ","); पर अगली कॉल pch0x0 होने के लिए प्रस्तुत करता है। क्या ऐसी चीजें हैं जिन्हें मैं रिकर्सन कॉल करते समय अवगत नहीं हूं?

उत्तर

11

strtok() रैत्रांत नहीं है। यदि आप इसे रिकर्सिव फ़ंक्शन में उपयोग करना चाहते हैं तो आपको strtok_r() का उपयोग करना होगा।

यह भी देखें: strtok, strtok_r

5

आप फिर से strtok फ़ंक्शन को कॉल नहीं कर सकता से पहले पिछले निष्पादन किया जाता है - यह reentrant नहीं है।

बजाय अपने रैत्रांत संस्करण strtok_r का प्रयोग करें।