2011-09-19 10 views
5
std::cout << (DWORD)"test"; 

यदि मैं संकलित करता हूं और इसे चलाता हूं तो मुझे हर बार अलग-अलग आउटपुट मान मिलते हैं, लेकिन मैं यह नहीं समझ सकता कि क्यों।डीडब्ल्यूओआर को एक स्ट्रिंग टाइप करते समय मुझे रन-टाइम पर एक अलग मूल्य क्यों मिलता है?

कोई विचार?

पीएस: मैं विंडोज 7 64-बिट का उपयोग कर रहा हूं और मैं माइक्रोसॉफ्ट विजुअल सी ++ 2010 अल्टीमेट के साथ संकलित कर रहा हूं।

+2

और आप इससे क्या बाहर निकलने की उम्मीद कर रहे थे? –

+0

यह करने के लिए एक बेवकूफ बात है, लेकिन एक वैध सवाल- डाउनवोट के लिए औचित्य नहीं दिखता है। मैं एक दूरस्थ प्रक्रिया आधार पते का निर्धारण करने के बारे में सीख रहा हूँ – Puppy

+0

, जो इस प्रकार '" pinball.exe "' के रूप में कुछ हो सकता है - और मेरी समझ ऑफसेट के साथ इस का उपयोग करने के लिए (एक खेल के स्कोर को पढ़ने के लिए कहते हैं) आप का प्रयोग करेंगे 'DWORD पता = (DWORD)" pinball.exe "+ ऑफ़सेट; 'जहां' ऑफसेट' '0xFC' या जो भी हो, के साथ कुछ हो सकता है। – Purebe

उत्तर

4

"कोड", आपके कोड में, स्ट्रिंग की शुरुआत के लिए प्रभावी रूप से एक सूचक है। जब आप इसे DWORD पर डालते हैं, तो आप पॉइंटर को पूर्णांक प्रकार पर कास्टिंग करते हैं, और उस नंबर को लिखते हैं।

स्मृति परीक्षण जो "परीक्षण" संग्रहीत कर रहा है, प्रत्येक रन के साथ बदल सकता है, आप जो मूल्य देखते हैं वह बदल जाएगा।

+0

ओह .... अच्छा लगता है कि मेरे हिस्से पर एक सुंदर स्पष्ट ओवर-दृष्टि मुझे लगता है। धन्यवाद! – Purebe

+2

के रूप में * क्यों * स्ट्रिंग निरंतर (जो निष्पादन के स्थिर डेटा सेगमेंट से आता है) प्रत्येक रन के साथ परिवर्तन का पता है, यह [पता स्थान लेआउट randomization] (http://en.wikipedia.org/wiki/ की वजह से शायद है पता_space_layout_randomization) (एएसएलआर)। –

2
std::cout << (DWORD)"test"; 

इस के बराबर है:

यह एक ही मूल्य मुद्रित होगा यदि आप यह भी कार्य करें:

const char *tmp = "test"; 
std::cout << (DWORD)tmp; 

है यही कारण है, यह DWORD में डालने के बाद पता प्रिंट :

std::cout << (const void*)"test"; 
संबंधित मुद्दे

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