pointers - Character search in C programming -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब

एक प्रोग्राम में एक फ़ंक्शन है जिसकी जरूरत है एक स्ट्रिंग फ़ाइल में एक अक्षर खोजना। मुख्य में स्ट्रिंग घोषित की जाती है और मान इस तरह से उपयोगकर्ता इनपुट द्वारा निर्धारित किया जाता है:

  चार छात्रडेटा [40]; Scanf ("% s", और छात्रडेटा);  

कार्य के हिस्से के रूप में, उपयोगकर्ता हमेशा अक्षर '/' को स्ट्रिंग के बीच में लिख देगा, जो कि मिलना होगा। खोज के लिए मेरा कोड:

  int i = 0; चार z = '/'; जबकि (studentData [i]! = Z) {i ++; }  

studentData फ़ंक्शन के एक चर के रूप में घोषित है

  char * student data   

विचार के बाद लूप वेरिएबल I में वर्ण z की स्थिति होती है, लेकिन प्रोग्राम लूप और दुर्घटनाओं से बाहर कभी नहीं आता है। यह संभवतः शुरुआत गलती है क्योंकि मैं इस पर नया हूँ ... मदद के लिए धन्यवाद!

इसके बजाय

  scanf ("% s", और छात्रडेटा);  

प्रयास करें

<पूर्व> scanf ("% s", studentdata);

क्योंकि studentdata पहले से ही एक संकेतक है। वर्तमान में आप scanf को उस स्थान पर लिखने के लिए कह रहे हैं जहां पॉइंटर पॉइंट का पता है, न कि पॉइंटर पॉइंट (यह वास्तविक पॉइंटर को अधिलेखित करेगा, और संभवतः आसन्न मेमोरी, अप्रत्याशित व्यवहार के कारण होगा)।

इसके अलावा, @chux से दो टिप्पणियों पर गौर करें कि आप अपने प्रोग्राम को दुर्घटनाग्रस्त होने से रोका जा सकता है यदि '/' नहीं पाया जाता है:

लूप को बदलना जब किसी नल वर्ण का सामना होता है: <पूर्व> जबकि (studentData [i]! = Z & amp; छात्रडेटा [i]! = '\ 0')

केवल 39 अक्षरों तक इनपुट की अनुमति दें स्कैन एफ से (रिक्त टर्मिनेटर के लिए 40 वाँ रखते हुए):

<प्री> scanf ("% 39s", studentdata);

Comments

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

class - Kivy: how to instantiate a dynamic classes in python -

svn - Cannot merge back into trunk, must be ancestrally related. But they *are* related as far as I understand -