2014-04-25 13 views
5

इस कोड के बाद मैंने निम्नलिखित कोड में cout<<(char*)NULL; का उपयोग किया है, मेरा प्रोग्राम आउटपुट स्क्रीन पर कुछ भी प्रिंट नहीं कर रहा है। क्या इसका मतलब है कि मैंने close(1)cout के साथ किया है? वास्तव में यहाँ क्या हो रहा है? क्या यह एक बग है? कृपया अपने विचार साझा करें।क्या "cout << (char *) नूल" कर रहा है "बंद (1)" यहाँ?

#include<iostream> 
using namespace std; 

void f(){ 
    cout<<"\nfun\n"; 
} 

main(){ 
cout<<(char*)NULL; 
f(); //not getting printed ! 
cout<<"\nhello\n"; //not getting printed ! 
cout<<"hii how are you?"; //not getting printed, why?? 
} 

मैंने दोनों जीसीसी और देवकैप कंपाइलर्स के साथ यह कोशिश की है, वही व्यवहार देखा गया है।

उत्तर

3

यहाँ आप धारा जो कुछ भी कारण बनता है पर badbit सेट मुद्रित करने के लिए cout<<(char*)NULL;

if (!__s) 
__out.setstate(ios_base::badbit); 

के बाद मानक का कहना है: requires: shall not be a null pointer। तो आपके कार्यक्रम में निश्चित रूप से अनिर्धारित व्यवहार है और इसे ठीक किया जाना चाहिए। आप cout.clear() का उपयोग कर खराब बिट को साफ़ कर सकते हैं।

आपके मामले में, cout<<(char*)NULL; अपरिभाषित व्यवहार का कारण बनता है। लेकिन जीसीसी इसे सुरक्षित रूप से निभाता है।

आशा है कि इससे मदद मिलती है!

5

cout << (char *)NULL अपरिभाषित व्यवहार का कारण बनता है। कुछ भी हो सकता है। (संकलक मानता है कि जब आप असेंबली कोड उत्पन्न करते हैं तो आप ऐसा नहीं करते हैं)।

char * यहां उपयोग किए गए तर्क को एक नल-टर्मिनेटेड स्ट्रिंग में एक वर्ण को इंगित करना होगा।

2

(char*)NULL"NULL" जैसे स्ट्रिंग में "NULL" को चालू नहीं करता है, जो आपने सोचा था। NULL वास्तव में एक मैक्रो है जो 0 तक फैलता है। इसे char* पर कास्ट करने से इसे शून्य में एक पॉइंटर में बदल जाता है (एक शून्य सूचक)। एकमात्र समस्या इसे प्रिंट करने के साथ आता है। एक शून्य-सूचक मुद्रित करने का प्रयास करने के लिए यह Undefined Behavior है। इस बिंदु तक आप अपने कार्यक्रम को प्रदर्शित करने वाले किसी भी व्यवहार की भावना नहीं बना सकते हैं। तथ्य यह है कि आपका प्रोग्राम दुर्घटनाग्रस्त नहीं हुआ है, यह मेरे लिए आश्चर्यचकित है।

+0

हाँ, यह आश्चर्यजनक था और मैंने अपने लिनक्स (इस कंपाइलर जीसीसी और क्लैंग दोनों का उपयोग करके) पर यह नमूना कार्यक्रम चलाया और यह क्रैश नहीं हुआ। –

संबंधित मुद्दे