gcc 4.4.4 c89एक स्ट्रिंग
स्ट्रिंग को समाप्त करने का मानक तरीका क्या है? जब मैं NULL
का उपयोग करता हूं तो मुझे एक चेतावनी संदेश मिलता है।
*dest++ = 0;
*dest++ = '\0';
*dest++ = NULL; /* Warning: Assignment takes integer from pointer without a cast */
स्रोत कोड:
size_t s_strscpy(char *dest, const char *src, const size_t len)
{
/* Copy the contents from src to dest */
size_t i = 0;
for(i = 0; i < len; i++)
*dest++ = *src++;
/* Null terminate dest */
*dest++ = 0;
return i;
}
एक और सवाल: मैं जानबूझ कर बाहर लाइन है कि समाप्त शून्य टिप्पणी की। हालांकि, यह अभी भी नियत की सामग्री को सही तरीके से मुद्रित करता है। इस फ़ंक्शन के कॉलर स्ट्रिंग की लंबाई को NULL
या तो शामिल नहीं करेंगे। यानी strlen(src) + 1
या stlen(src)
।
size_t s_strscpy(char *dest, const char *src, const size_t len)
{
/* Copy the contents from src to dest */
size_t i = 0;
/* Don't copy the null terminator */
for(i = 0; i < len - 1; i++)
*dest++ = *src++;
/* Don't add the Null terminator */
/* *dest++ = 0; */
return i;
}
मैं '* dest ++ = '\ 0' पसंद करता हूं; 'चूंकि इस संदर्भ में' \ 0'' का सही प्रकार है। –
@ पॉल आर: आप इसे उत्तर क्यों नहीं देते? – Lucas
'* dest ++ = 0; 'संदर्भित मान को 0 पर निर्दिष्ट करने के बाद सूचक को पोस्ट-वृद्धि क्यों करें? – Larry