मेरी कक्षा में हम सी की malloc() फ़ंक्शन की अपनी प्रतिलिपि लिख रहे हैं। मेरे कोड (जो वर्तमान में अंतरिक्ष ठीक आवंटित कर सकते हैं) का परीक्षण करने के लिए मैं उपयोग कर रहा था:प्रिंटफ ("% s", char *) प्रिंटिंग कब रोकता है?
Hello
Unprintable character
कुछ डिबगिंग लगा कि मेरे कोड के कारण नहीं किया गया था इस दर असल:
char* ptr = my_malloc(6*sizeof(char));
memcpy(ptr, "Hello\n", 6*sizeof(char));
printf("%s", ptr);
उत्पादन आम तौर पर इस तरह होगा , इस प्रकार के रूप में ptr की स्मृति है:
[24 मेटा जानकारी के बाइट्स] [अनुरोध किया बाइट्स की संख्या] [पैडिंग]
तो मैं लगा कि printf गद्दी है, जो में पहुँच गया था बस कचरा इसलिए मैं का एक परीक्षण भाग गया: printf("%s", "test\nd");
और मिल गया:
test
d
कौन सा मुझे आश्चर्य बनाता है, जब printf करता है ("% s", चार *) मुद्रण वर्ण रोक?
Dur, मैं तार समाप्त करने के लिए \ 0 का उपयोग करना चाहिए है? Dur Dur Dur – user327406
आपको खुद को \ 0 जोड़ना नहीं है। जब आप एक शाब्दिक स्ट्रिंग बनाते हैं या इनपुट के रूप में प्राप्त करते हैं, तो सी आपके लिए जोड़ता है। आप वास्तव में \ 0 नहीं देखते हैं। यदि आपने वास्तविक असेंबली कोड को देखा तो वह "हैलो \ n" स्ट्रिंग सात वर्ण है। – Uri