मैं उद्देश्य-सी के साथ शुरू करने, प्रोग्रामिंग के लिए नया हूं लेकिन आगे बढ़ने से पहले मूल बातें वापस जाने का फैसला किया है। मैं सी पर कुछ समय बिता रहा हूं, और सूचक भ्रम के माध्यम से संघर्ष कर रहा हूं। मेरा सवाल यह है कि कैसे K& आर कहता है कि fgets लागू किया गया है (p165, 2nd ed।) नीचे दी गई कोड मेरी कुछ टिप्पणियों के साथ पाठ से सीधे है।fgets कार्यान्वयन (के एंड आर)
char* fgets(char* s, int n, FILE *iop)
{
register int c;
register char* cs;
cs = s;
while(--n > 0 && (c = getc(iop)) != EOF)
{
// put the input char into the current pointer position, then increment it
// if a newline entered, break
if((*cs++ = c) == '\n')
break;
}
*cs = '\0';
return (c == EOF && cs == s) ? NULL : s;
}
1) हम fgets समारोह, जिसका स्थान पर हम उपयोगकर्ता इनपुट स्टोर करने के लिए एक चार * रों गुजरती हैं। स्थानीय char * cs घोषित करने की आवश्यकता क्यों है - और उसके बाद इसे शुरू करें? यदि हम कथन के भीतर सीधे तौर पर हस्तक्षेप/जोड़ नहीं सकते हैं? सीएस के रूप में देखकर एस को इंगित करने के लिए शुरू किया गया है, सीएस को बिल्कुल उसी चीज में जोड़ नहीं रहा है?
2) उपरोक्त के साथ बंधे ... जब फ़ंक्शन वापस आता है, तो यह देखने के लिए एक परीक्षण किया जाता है कि cs == s। यह जरूरी क्यों है?
मुझे लगता है कि मुझे कुछ मौलिक याद आ रही है - मैंने एसओ और Google की जांच की लेकिन इसे काफी समझ नहीं आया। धन्यवाद!
"उद्देश्य-सी के साथ शुरू करना, लेकिन आगे बढ़ने से पहले मूलभूत बातें वापस जाने का फैसला किया है" - उत्कृष्ट, ** प्रत्येक शुरुआत करने वाले को ऐसा करना चाहिए। ** –
मुझे लगता है कि मैं इस तरह का सामना कर रहा था ओब्जे-सी में सी से वापस जाने के बाद से मैं फिर से एक पूर्ण klutz की तरह महसूस करता हूं, लेकिन विभाजन के दोष और अजीब कार्यक्रम व्यवहार के खिलाफ बार-बार अपने सिर को टक्कर मारने के बावजूद, यह निश्चित रूप से प्रयास के लायक है। – drjimmie1976
यह निश्चित रूप से इसके लायक है। उद्देश्य सी को समझने के लिए मास्टरिंग सी अनिवार्य है। –