किसी को भी एक विचार मैं गलत क्या कर रहा
strlen()
रिटर्न एक size_t
है, जो एक अहस्ताक्षरित पूर्णांक प्रकार है मिला है। -1
एक हस्ताक्षरित पूर्णांक के रूप में व्याख्या किया गया एक बड़ा मान है, इसलिए यह आपकी स्ट्रिंग की लंबाई से अधिक होने वाला होता है। में -Wsign-compare
ध्वज का उपयोग कर सकते हैं और कुछ अन्य कंपाइलर्स आपको चेतावनी देने के लिए जब आप हस्ताक्षरित और हस्ताक्षरित मानों की तुलना करने का प्रयास करते हैं।
इसके अलावा, यह -1
पर स्ट्रिंग की लंबाई की तुलना करने के लिए अधिक समझ में नहीं आता है। लंबाई कभी नकारात्मक नहीं हो सकती है; यह हमेशा0
या इससे अधिक होने जा रहा है। तो आप शायद 0
के खिलाफ परीक्षण करने के लिए अपने कोड को फिर से लिखना चाहते हैं, या अन्यथा आप जो भी शर्त परीक्षण कर रहे हैं उसे ठीक से कार्यान्वित करें।
if(-1<strlen(str)) printf("The size of the string is %d", strlen(str));
इस कोड में, आप यथोचित परीक्षण हमेशा सफल होने के लिए उम्मीद कर सकते हैं और printf()
निष्पादित करने के लिए, लंबाई हमेशा होता है के बाद से 0
या अधिक। लेकिन आप पाते हैं कि परीक्षण वास्तव में विफल रहता है और printf()
कभी नहीं होता है क्योंकि -1
को बिना हस्ताक्षरित पदोन्नत किया जाता है ताकि इसकी तुलना size_t
से की जा सके। आसान समाधान स्थिति को पूरी तरह से निकालना है: आप जानते हैं कि परीक्षा हमेशा सफल रहेगी, इसलिए इसकी कोई आवश्यकता नहीं है। इसके अलावा
printf("The size of the string is %zu", strlen(str));
*, के बाद से %zu
को %d
से प्रिंट फॉर्मेट स्पेसिफायर बदलने के लिए, के रूप में मैट McNabb एक टिप्पणी में कहा, आप एक size_t
मुद्रित करने के लिए कोशिश कर रहे हैं: बस if
* को हटा दें।
'strlen (str) 'का आउटपुट मान क्या है? – sasquatch
यह हो सकता है कि यह हस्ताक्षरित मूल्य लौटाता है और जो चीजें –
को तोड़ता है, यह आपके कंपाइलर –