मान लीजिए कि आपके पास एक स्ट्रिंग है जिसे nullसमाप्त नहीं किया गया है और आपको इसका सही आकार पता है, तो आप उस स्ट्रिंग को printfC में कैसे प्रिंट कर सकते हैं ? मुझे ऐसी विधि याद है, लेकिन मुझे अभी पता नहीं चला ...
मान लीजिए कि आपके पास एक स्ट्रिंग है जिसे nullसमाप्त नहीं किया गया है और आपको इसका सही आकार पता है, तो आप उस स्ट्रिंग को printfC में कैसे प्रिंट कर सकते हैं ? मुझे ऐसी विधि याद है, लेकिन मुझे अभी पता नहीं चला ...
जवाबों:
प्रिंटफ के साथ एक संभावना है, यह इस प्रकार है:
printf("%.*s", stringLength, pointerToString);
कुछ भी कॉपी करने की आवश्यकता नहीं है, मूल स्ट्रिंग या बफर को संशोधित करने की कोई आवश्यकता नहीं है।
printfएक ~ दशक के बाद भी बुनियादी चीजों के बारे में बातें सीखता हूँ ... :)
printf11 वर्णों तक प्रिंट होगा या जब तक उसका सामना NULL से नहीं होगा, जो भी पहले आएगा; आपके उदाहरण में NULL पहले आता है। अधिकतम लंबाई निर्दिष्ट करने से NULL का "एंड-ऑफ-स्ट्रिंग" अर्थ खो नहीं जाता है printf।
यहां बताया गया है कि कैसे %.*sकाम करता है, और यह कहां निर्दिष्ट है।
प्रिंटफ टेम्पलेट स्ट्रिंग में रूपांतरण विनिर्देशों का सामान्य रूप है:
% [ param-no $] flags width [ . precision ] type conversionया
% [ param-no $] flags width . * [ param-no $] type conversion
दूसरा रूप तर्क सूची से सटीक प्राप्त करने के लिए है:
आप '*' की शुद्धता भी बता सकते हैं। इसका मतलब यह है कि तर्क सूची में अगला तर्क (मुद्रित होने के लिए वास्तविक मूल्य से पहले) का उपयोग सटीक के रूप में किया जाता है। मान एक इंट होना चाहिए, और यदि यह नकारात्मक है तो इसे नजरअंदाज कर दिया जाना चाहिए।
- glibc मैनुअल में आउटपुट रूपांतरण सिंटैक्स
के लिए %sस्ट्रिंग स्वरूपण, सटीक एक विशेष अर्थ नहीं है:
लिखने के लिए अधिकतम संख्या में वर्णों को इंगित करने के लिए एक सटीक निर्दिष्ट किया जा सकता है; अन्यथा स्ट्रिंग में वर्ण, लेकिन समाप्त करने योग्य अशक्त वर्ण को शामिल नहीं करते हुए आउटपुट स्ट्रीम में लिखे जाते हैं।
- glibc मैनुअल में अन्य आउटपुट रूपांतरण
अन्य उपयोगी संस्करण:
"%*.*s", maxlen, maxlen, val सही-औचित्य, पहले रिक्त स्थान डालने;"%-*.*s", maxlen, maxlen, val वाम-औचित्य होगा।"%-*.*s", padding, str_view.size(), str_view.data()
आप stdout करने के लिए एक fwrite () का उपयोग कर सकते हैं!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
इस तरह से आप पहले वर्ण (संख्या_ संख्या_ चर में परिभाषित संख्या) को एक फ़ाइल में आउटपुट करेंगे, इस मामले में stdout (मानक आउटपुट, आपकी स्क्रीन)!
printf("%.*s", length, string) काम नहीं करेगा।
इसका मतलब यूपी टू लेंथ बाइट्स या नल बाइट को प्रिंट करना है, जो भी पहले आए। यदि आपके गैर-शून्य-टर्मिनेटेड सरणी-ऑफ-चार में अशक्त बाइट्स शामिल हैं, तो लंबाई उन पर बंद हो जाएगी, और जारी नहीं रहेगी।
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
मैंने कोड को संपादित किया, अन्य तरीके से:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
Cसंदर्भ, सभी स्ट्रिंग्स अशक्त समाप्त कर रहे हैं। उनके बिना अशक्त के चार के तार तार नहीं हैं ... वे चार के