2012-03-14 20 views
6

मैं वर्तमान में हैकिंग पढ़ रहा हूँ शोषण की कला और वहां पर एक उदाहरण है कि मैं सही पाने के लिए नहीं कर पा रहे है के तर्कों की उम्मीद है। त्रुटि में परिणाम संकलित करने के लिए प्रयास कर रहा है:ग संकेत - प्रारूप चेतावनी '% एक्स' प्रकार 'अहस्ताक्षरित int'

./addressof.c: In function ‘main’: 
./addressof.c:8:4: warning: format ‘%x’ expects argument of type ‘unsigned int’, 
but argument 2 has type ‘int *’ [-Wformat] 


#include <stdio.h> 
int main() { 
    int int_var = 5; 
    int *int_ptr; 

    int_ptr = &int_var; // Put the address of int_var into int_ptr. 

    printf("int_ptr = 0x%08x\n", int_ptr); 
    printf("&int_ptr = 0x%08x\n", &int_ptr); 
    printf("*int_ptr = 0x%08x\n\n", *int_ptr); 

    printf("int_var is located at 0x%08x and contains %d\n", &int_var, int_var); 
    printf("int_ptr is located at 0x%08x, contains 0x%08x, and points to %d\n\n", 
     &int_ptr, int_ptr, *int_ptr); 
} 

मुझे समझ में जहां त्रुटि है, तो मैं सिर्फ यकीन है कि यह कैसे तय करने के लिए नहीं कर रहा हूँ।

+0

@larsmans (here देखें) - वह 'पूर्णांक में यह बचाता है *', यह एक समस्या है? – MByD

+0

@ बिन्यामिनशेयर: कभी भी ध्यान न दें, कोड को गलत तरीके से पढ़ें। –

उत्तर

15

सूचक के लिए फॉर्मेट स्पेसिफायर %p, नहीं %x है।

+0

यदि आप कृपया एक और त्वरित सवाल, तो बहुत बहुत धन्यवाद। मुझे बस एक और त्रुटि मिल रही है - चेतावनी: प्रारूप '% p' ​​प्रकार 'void *' के तर्क की अपेक्षा करता है, लेकिन तर्क 2 में 'int' टाइप किया गया है [-फॉर्मैट] इसका क्या अर्थ है? यह टाइप शून्य की अपेक्षा क्यों करता है? – bigl

+2

@bigl ऐसा इसलिए है क्योंकि आप शायद '% int'ptr' (जो 'int' है) मुद्रित करने का प्रयास कर रहे हैं'% p' प्रारूप विनिर्देशक का उपयोग कर। 'Int_ptr' और' और int_ptr' संकेत दिए गए हैं और '% p' का उपयोग कर मुद्रित किया जाना चाहिए, लेकिन * मूल्य कि सूचक इशारा कर रही है करने के लिए * एक पूर्णांक है और का उपयोग कर'% d' – Praetorian

+2

@bigl मुद्रित किया जाना चाहिए: आप किसी भी कास्ट करना होगा सूचक सूचक शून्य करने के लिए जब यह variadically 'printf' के माध्यम से गुजर:।' printf ("% p" (शून्य *) (&x)); 'विभिन्न सूचक प्रकार उसी तरह बाहर रखी जाने की आवश्यकता नहीं कर रहे हैं, लेकिन वे * कर रहे हैं * गारंटी परिवर्तनीय रूप से 'शून्य *' –

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