c, c++ most basic double quotes -
char * a = "hello world";
यदि 'एच' का पता 0x01 है तो printf% s के साथ डी को प्रिंट करता है लेकिन अगर उसी कोड को मैन्युअल प्रिंटिंग रूटीन के साथ लिखा जाता है
(* A! = NULL) {printf ("% c", n [a]); n ++;}
यह कुछ और अक्षर प्रिंट करता है .. लेकिन
printf ("% s", a);
इसे पूरी तरह प्रिंट करता है।
जबकि (* a ++) printf ("% c" , * (ए -1)); या (; * a ++;) printf के लिए ("% c", * (a-1));
हालांकि काम है लेकिन मैं समाधान नहीं चाहता, लेकिन प्रक्रिया तंत्र ..
तो मेरे दिमाग में आने वाला सवाल
है कि क्या printf हो जाता है कुछ रजिस्टर (या किसी भी मेमोरी इकाई) से स्ट्रिंग की लंबाई या यह चरित्र की जांच करता है .. फिर प्रिंट करता है ...
जिस तरह से आप चरित्र स्ट्रिंग में अनुक्रमणित कर रहे हैं अजीब है। यह स्ट्रिंग के लिए काम करता है, लेकिन बंद नहीं होगा क्योंकि आप कभी भी * a का मान नहीं बदलते आपका प्रोग्राम क्या करता है a
ऑफसेट n
प्राप्त करने की कोशिश करता है, इसलिए पहले 11 पदों के लिए वे एक समान हैं, लेकिन लूप समाप्त नहीं होता क्योंकि * A
हमेशा 'एच' होगा
। आप को समाप्त करने की स्थिति क्या चाहते हैं n & lt; हालांकि, उस प्रोग्राम को लिखने का अधिक संक्षिप्त तरीका होगा:
int main (int argc, char ** argv),
{Char * a = "हैलो वर्ल्ड"; जबकि (* ए) प्रिंटफ़ ("% c", * a ++); वापसी 0; }
यह इसलिए काम करता है क्योंकि a
वर्णों की एक सरणी है और जैसा कि हम प्रत्येक अक्षर (स्थिति पर संग्रहीत मूल्य को डी-संदर्भित करते हैं) को भी प्रिंट कर रहे हैं अगले स्थिति में वृद्धि स्ट्रिंग को एक नल संदर्भ से समाप्त करना चाहिए, जिससे पाश को साइन टर्मिनेटर पर साइन * a == 0
समाप्त कर दिया जाएगा।
Comments
Post a Comment