2012-04-02 5 views
9

मुझे पता है कि% s वर्णों की एक स्ट्रिंग है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए। क्या कोई मुझे एक बहुत ही बुनियादी उदाहरण प्रदान कर सकता है कि इसका उपयोग कैसे किया जाता है और यह चार से अलग कैसे होता है?सी में सही ढंग से% s का उपयोग करना - बहुत ही बुनियादी स्तर


(संपादित)

मैं इस पाठ्यक्रम में 2 सप्ताह हूँ, यह मेरी पहली बार प्रोग्रामिंग है। मुझे ऐसी सामग्री का उपयोग करने की अनुमति नहीं है जिसे अभी तक असाइनमेंट पर सिखाया नहीं गया है, इसलिए मैंने पूछा। मेरे पास सी पर कुछ किताबें हैं और गुम हो गई हैं लेकिन अभी भी यकीन नहीं है, इसलिए मैंने पूछा। (सभी डाउन-वोटों के लिए धन्यवाद) नीचे दिए गए सभी उदाहरण सरणी का उपयोग करते हैं जिन्हें अभी तक सिखाया नहीं गया है, इसलिए मुझे लगता है कि मैं अभी भी% s का उपयोग नहीं कर सकता। धन्यवाद।

+1

क्या आपने गुगल किया है? कोई पाठ्यपुस्तक पढ़ें? किसी भी कोड का प्रयास किया? – abelenky

+0

संभावित डुप्लिकेट [मैं printf का उपयोग कर एक गैर-शून्य-समाप्त स्ट्रिंग कैसे मुद्रित करूं?] (Http://stackoverflow.com/questions/2137779/how-do-i-print-a-non-null-terminated-string -using-printf) –

+1

@nofe '% c' एक वर्ण के लिए है जबकि'% s' वर्णों की एक श्रृंखला के लिए शून्य-समाप्त हो गया है। क्या विशेष रूप से आप समझ में नहीं आया? – Mahesh

उत्तर

8

दोनों *printf और *scanf के लिए प्रदर्शित कर सकते हैं, %s उम्मीद इसी तर्क प्रकार char * का हो सकता है, और scanf के लिए, यह करने के लिए बेहतर बिंदु था एक लिखने योग्य बफर (यानी, स्ट्रिंग अक्षर नहीं)।

char *str_constant = "I point to a string literal"; 
char str_buf[] = "I am an array of char initialized with a string literal"; 

printf("string literal = %s\n", "I am a string literal"); 
printf("str_constant = %s\n", str_constant); 
printf("str_buf = %s\n", str_buf); 

scanf("%55s", str_buf); 

एक explcit क्षेत्र चौड़ाई बिना scanf में %s का उपयोग खोलता है एक ही बफर अतिप्रवाह का फायदा उठाने कि gets किया; अर्थात्, यदि लक्ष्य बफर की तुलना में इनपुट स्ट्रीम में अधिक वर्ण हैं, तो scanf उन अतिरिक्त पात्रों को बफर के बाहर स्मृति में खुशी से लिखेंगे, संभावित रूप से कुछ महत्वपूर्ण clobbering। दुर्भाग्य से, printf में विपरीत, आप क्षेत्र के साथ एक रन समय तर्क के रूप में की आपूर्ति नहीं कर सकते हैं:

printf("%*s\n", field_width, string); 

एक विकल्प प्रारूप स्ट्रिंग गतिशील निर्माण करने के लिए है:

char fmt[10]; 
sprintf(fmt, "%%%lus", (unsigned long) (sizeof str_buf) - 1); 
... 
scanf(fmt, target_buffer); // fmt = "%55s" 

संपादित

scanf का उपयोग %s रूपांतरण विनिर्देशक के साथ पहले व्हाइटस्पेस चरित्र पर स्कैनिंग बंद कर देगा; उदाहरण के लिए, अपने इनपुट स्ट्रीम लग रहा है, तो जैसे

"This is a test" 

तो scanf("%55s", str_buf) पढ़ सकते हैं और str_buf करने के लिए "This" आवंटित करेगा। ध्यान दें कि विनिर्देशक वाला क्षेत्र इस मामले में कोई फर्क नहीं पड़ता है।

4

यहाँ जाता है: जब तक यह शून्य अर्थात हो जाता है

char str[] = "This is the end"; 
char input[100]; 

printf("%s\n", str); 
printf("%c\n", *str); 

scanf("%99s", input); 
1
void myfunc(void) 
{ 
    char* text = "Hello World"; 
    char aLetter = 'C'; 

    printf("%s\n", text); 
    printf("%c\n", aLetter); 
} 
1

% s सभी मूल्य मिलेगा '\ 0'।

char str1[] = "This is the end\0"; 
printf("%s",str1); 

दे देंगे

यह अंत

char str2[] = "this is\0 the end\0"; 
printf("%s",str2); 

दे देंगे

इस

0

% s चार की एक सरणी के प्रतिनिधित्व है

char string[10] // here is a array of chars, they max length is 10; 
char character; // just a char 1 letter/from the ascii map 

character = 'a'; // assign 'a' to character 
printf("character %c ",a); //we will display 'a' to stout 

तो स्ट्रिंग चार की एक सरणी है हम स्मृति

string[0]='h'; 
string[1]='e'; 
string[2]='l'; 
string[3]='l'; 
string[4]='o'; 
string[5]=(char) 0;//asigning the last element of the 'word' a mark so the string ends 

इस नियुक्ति चार शब्द की तरह प्रारंभ में किया जा सकता है की अंतरिक्ष प्रति कई चरित्र प्रदान कर सकते हैं = // शब्द सरणी "इस एक शब्द है" वर्णों के अब इस स्ट्रिंग को मिला है और इसे सांख्यिकीय रूप से परिभाषित किया गया है

खिलौना स्ट्रैपी जैसे कार्यों के साथ निर्दिष्ट वर्णों की सरणी को मान भी निर्दिष्ट कर सकता है;

strcpy(string,"hello"); 

इस उदाहरण के रूप में ही करते हैं और स्वचालित रूप से अंत

इतना पर (चार) 0 जोड़ें यदि आपने% S के साथ इसे प्रिंट printf ("मेरी स्ट्रिंग% s", स्ट्रिंग);

और कैसे स्ट्रिंग एक सरणी हम सिर्फ इसका हिस्सा

//       the array one char 
printf("first letter of wrd %s  is :%c ",string,string[1] ); 
संबंधित मुद्दे