strlen
टर्मिनल नल कैरेक्टर से पहले वर्णों की संख्या देता है। strlen
के एक कार्यान्वयन इस प्रकार दिखाई देंगे:अनियमित मानों के साथ एक स्ट्रिंग पर strlen अपरिभाषित व्यवहार है?
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s) {}
return(s - str);
}
यह विशेष रूप से कार्यान्वयन dereferences s
, जहां s
अनिश्चित मूल्यों हो सकती है। यह इस के बराबर है:
int a;
int* p = &a;
*p;
इसलिए उदाहरण के लिए इस (जो strlen
का कारण बनता है एक गलत उत्पादन देने के लिए) करने के लिए अगर एक थे:
char buffer[10];
buffer[9] = '\0';
strlen(buffer);
यह अपरिभाषित व्यवहार है?
@ user2864740 क्या आप सुनिश्चित हैं कि स्ट्रिंग * में कुछ मूल्य होना चाहिए? क्या सी को पढ़ने-पहले-लिखने पर खुशी से दुर्घटनाग्रस्त होने की अनुमति नहीं है? – kay