2012-02-21 16 views
5

पर पॉइंटर देता हूं जब मैं निम्न कोड चलाने की कोशिश करता हूं तो मुझे एक सीजी गलती मिलती है। मैंने इसे gdb के माध्यम से चलाने का प्रयास किया है, और मैं समझता हूं कि त्रुटि printf पर कॉल करने के हिस्से के रूप में हो रही है, लेकिन मैं खो गया हूं कि यह वास्तव में क्यों काम नहीं कर रहा है।प्रोग्राम क्रैश करता है जब मैं printf को char array

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    char c[5] = "Test"; 
    char *type = NULL; 

    type = &c[0]; 
    printf("%s\n", *type); 
} 

अगर मैं printf("%s\n", c); साथ printf("%s\n", *type); की जगह मैं "टेस्ट" मुद्रित रूप में मैं उम्मीद मिलता है। यह चार सरणी के सूचक के साथ क्यों काम नहीं करता है?

+2

मैं बस नाइटपिक करना चाहता हूं: "सी" क्रैश नहीं हुआ क्योंकि सी प्रोग्राम नहीं है। आपका कंपाइलर क्रैश नहीं हुआ। *** आपने क्रैश किए गए प्रोग्राम को लिखने के लिए सी का उपयोग किया। *** –

+1

आप सही डेविड हैं। मुझे पता है कि मेरा कहना क्या था, और जाहिर है, लेकिन आप इस तरह की चीजों पर चर्चा करते समय सटीक होना महत्वपूर्ण है। – WhiteHotLoveTiger

+0

स्पष्ट स्पष्टीकरण के लिए धन्यवाद 'सी [0] ' – wulfgarpro

उत्तर

15

आप एक सादा char और printf गुजरने की कोशिश कर रहे हैं। ऐसा करें:

printf("%s\n", type); 
      ^

आप *type पार कर लेते हैं यह printf कह "मैं स्थान टी पर एक तार मिल गया है" की तरह है।

भी type = &c[0] भ्रामक प्रकार का है। आप क्यों नहीं बस नहीं है:

type = c; 
+0

देखने के लिए अपने'% s' को '% c' में बदलें। बस जब मैंने सोचा कि मुझे पॉइंटर्स का लटका मिल रहा है, तो मुझे एहसास हुआ कि मुझे उनकी समीक्षा करने की ज़रूरत है। – WhiteHotLoveTiger

5

भिन्नता नहीं type करो। यह एक सूचक होना चाहिए।

4

में type के डेरफ़्रेंसिंग को हटाएं।

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