2013-06-06 8 views
8

के मैं अपने सी कार्यक्रम में निम्न कोड है मान लेते हैं:printf() प्रिंट पूरे सरणी

#include <stdio.h> 

void PrintSomeMessage(char *p); 

int main(int argc, char *argv[]) { 
    char arr[10] = "hello"; 
    PrintSomeMessage(&arr[0]); 
    return 0; 
} 

void PrintSomeMessage(char *p) 
{ 
    printf("p: %s",p); 
} 

क्यों इस के उत्पादन में पूरे शब्द "नमस्ते" एक ही चरित्र के बजाय होगा "ज "?

मुझे लगता है कि, अगर मैं फॉर्मेटर में "%c" डालता हूं, तो यह केवल एक ही अक्षर प्रिंट करेगा। लेकिन फिर भी, इस पते में प्रत्येक पत्र के लिए स्मृति पता अलग है। कृपया, कोई मुझे यह समझाओ?

+1

तक प्रिंट करता है [मुझे प्रिंट करने से पहले सी में वर्ण सूचक को अव्यवस्थित करने की आवश्यकता क्यों नहीं है?] (Http://stackoverflow.com/questions/15841696/why-dont-i-need-to-dereference-a-character-pointer-in-c-before-printing-it/15841740#15841740) –

+0

नोट: '% c' doesn ' टी को मुद्रित करने के लिए पते की आवश्यकता है जहां '% s' को यात्रा करने की आवश्यकता है \ @' के रूप में @Rohan उत्तर में समझाया गया है। –

+0

@SuvP 'printf()' '% c' की आवश्यकता ** ** ** परिवर्तनीय, यह काफी स्पष्ट/तार्किक है कि इसे ** एकल ** तत्व के लिए मूल्य तक पहुंचने के लिए पते की आवश्यकता नहीं है (मूल्य से गुजर सकता है) । स्ट्रिंग को मुद्रित करने के लिए कहां से यात्रा के लिए पते की आवश्यकता होती है जब तक \ \' मुठभेड़ के समान रोहन ने अपने जवाब में समझाया। इसके अतिरिक्त मेमोरी स्कैनफ में स्टोर करने के लिए '% c' –

उत्तर

24

लेकिन फिर भी, इस पते में प्रत्येक अक्षर के लिए स्मृति पता अलग है।

मेमोरी पता अलग है लेकिन वर्णों की सरणी के रूप में वे अनुक्रमिक हैं। जब आप पहले तत्व का पता पास करते हैं और %s का उपयोग करते हैं, printf दिए गए पते से शुरू होने वाले सभी वर्णों को प्रिंट करेगा जब तक कि यह '\0' नहीं पाता।

4

arrays की स्थिति, मूल पता (सरणी का पता या पता) का पता सरणी में पहला तत्व है। इसके अलावा सरणी नाम एक सूचक के रूप में कार्य करता है।

घरों की एक पंक्ति पर विचार करें (प्रत्येक सरणी में एक तत्व है)। पंक्ति की पहचान करने के लिए, आपको केवल पहले घर के पते की आवश्यकता है। आप जानते हैं कि प्रत्येक घर अगले (अनुक्रमिक) के बाद होता है। पहले घर के पते को जोड़कर, आपको पंक्ति का पता भी मिल जाएगा।

स्ट्रिंग अक्षर (घोषणा में परिभाषित वर्ण सरणी) की वजह से, \0 द्वारा स्वचालित रूप से शामिल हैं।

printf प्रारूप विनिर्देशक और प्रदान किए गए पते का उपयोग करके प्रिंट करता है। चूंकि, आप %s का उपयोग करते हैं, यह '1 0'

+0

हाय के रूप में एक ही प्रश्न, कृपया डाउनवोट की व्याख्या करें ताकि हम सभी सीख सकें। –

+0

ऐसा लगता है कि जब मैं कल इस पोस्ट को देख रहा था तो स्क्रॉल करते समय मैंने गलत वर्तनी की; मैंने अभी अपनी प्रोफ़ाइल देखकर पता चला है। दुर्भाग्य से यह मुझे बिना किसी संपादन के गलती को उलट देगा क्योंकि मेरा वोट लॉक है। – Asura

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