मैंने इस फ़ंक्शन को सी में लिखा है, जो एक स्ट्रिंग के माध्यम से अगले गैर-सफेद-अंतरिक्ष वर्ण में पुनरावृति करने के लिए है:

char * iterate_through_whitespace(unsigned char * i){
    while(*i && *(i++) <= 32);
    return i-1;
}

ऐसा लगता है कि यह काफी अच्छी तरह से काम करता है, लेकिन मैं सोच रहा हूं कि यह मान लेना सुरक्षित है कि *i का मूल्यांकन उस स्थिति में किया जाएगा जो *i == '\0' है, और यह अंत से आगे नहीं चलेगा एक स्ट्रिंग। यह मेरे कंप्यूटर पर अच्छी तरह से काम करता है, लेकिन मैं सोच रहा हूं कि क्या यह अन्य मशीनों पर संकलित होने पर भी ऐसा ही व्यवहार करेगा।

c nul
20
Paul 26 सितंबर 2011, 02:54

3 जवाब

हां - लेकिन मेरी राय में अधिक स्पष्ट होना बेहतर शैली है:

while (*i != '\0' && ...

लेकिन 32 से तुलना करना शायद ही सबसे अच्छा तरीका है। 32 स्पेस कैरेक्टर के लिए ASCII/यूनिकोड कोड होता है, लेकिन C किसी विशेष कैरेक्टर सेट की गारंटी नहीं देता है - और 32 से कम वैल्यू वाले बहुत सारे कंट्रोल कैरेक्टर हैं जो व्हाइटस्पेस नहीं हैं।

isspace() फ़ंक्शन का उपयोग करें।

(और मैं कभी भी किसी सूचक का नाम i नहीं रखूंगा।)

13
Keith Thompson 26 सितंबर 2011, 02:58

C में, '\0' का ठीक वही मान है और टाइप करें जैसे 0। अपने कोड को कुरूप करने के अलावा कभी भी '\0' लिखने का कोई कारण नहीं है। \0 हालांकि डबल कोट्स के अंदर एम्बेडेड नल बाइट्स के साथ स्ट्रिंग्स बनाने के लिए उपयोगी हो सकता है।

3
R.. GitHub STOP HELPING ICE 26 सितंबर 2011, 04:28

ASCII मानक निर्देश देता है कि NUL वर्ण को बाइट 0 के रूप में एन्कोड किया गया है। जब तक आप एएससीआईआई के साथ पीछे की ओर संगत एन्कोडिंग के साथ काम करना बंद नहीं करते, तब तक कुछ भी गलत नहीं होना चाहिए।

0
zneak 26 सितंबर 2011, 02:59