Segmentation fault, no matter on how i change the code C++ -


यह मेरा कोड है

  #include & lt; unistd.h & gt; # शामिल करें & lt; sys / types.h & gt; # शामिल करें & lt; dirent.h & gt; # शामिल करें & lt; stdio.h & gt; # शामिल करें & lt; cstring & gt; # शामिल करें & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; bool समाप्त होता है (स्ट्रिंग const और amp; value, string const और ending) {if (value.length () & gt; = ending.length ()) {return (value.compare (value.length () - ending.length () , अंत। लम्बाई (), समापन) == 0); } विवरण झूठा है; } शून्य सूची डीर (कॉन्स्ट चार्ल्स * डायरेक्टरी, कॉन्स्ट चार * एक्सटेंशन) {DIR * dir; struct dirent * प्रविष्टि; अगर (! (dir = opendir (निर्देशिका))) {वापसी; } जबकि (एंट्री = रीडडीयर (डीआईआर)) {if (एंट्री-> डी_ टाइप == DT_DIR) {char path [1024]; Int len ​​= snprintf (मार्ग, आकार (पथ) -1, "% s /% s", डायरेक्टरी, एंट्री- & gt; d_name); पथ [लेन] = 0; यदि (एसआरसीएमपी (एंट्री-> डी_एनए, "।")! = 0 & amp; एआरसीसीएमपी (एंट्री-> डी_एनए, "..") = 0) {LISTDIR (पथ, एक्सटेंशन); }} और {string file = entry- & gt; d_name; यदि (समाप्त होता है (फ़ाइल, घुमटा ((चार *) "।", विस्तार)) = एक्सटेंशन == "*") {printf ("% s \ n", एंट्री-> डी_नाम); }}} बंदर (डीआईआर); } Int main (int count, char * पैरामीटर []) {const char * type = "*"; Const char * पथ = "।"; यदि (गणना & gt; 1) {path = पैरामीटर [1]; } अगर (गणना & gt; 2) {प्रकार = पैरामीटर [2]; } अगर (गणना & lt; 1; गिनती & gt; 3) {वापसी 0; } Listdir (मार्ग, प्रकार); वापसी 0; }   

और कोई फर्क नहीं पड़ता, जो मैं कर रहा हूं, मैं हमेशा सेगमेंटेशन गलती प्राप्त करता हूं।

डेबियन के तहत जी ++ के साथ संकलित करना कोई समस्या नहीं है, लेकिन एप्लिकेशन को चलाना हमेशा "विभाजन गलती"

तो क्या बात है?

आपकी त्रुटि निहित है रेखा strcat ((चार *) "।", विस्तार) , जहां आप एक स्ट्रिंग शब्दशः अंतर्निहित स्मृति में डेटा लिखने का प्रयास करते हैं।

स्ट्रिंग लीटरल्स को पढ़ने में लोड किया जाता है केवल मेमोरी सेगमेंट और उस पर लिखने का प्रयास करने से आपके सेगफ़ॉल्ट का कारण बनता है।

यदि आप strcat का उपयोग करना चाहते हैं, तो आपको पर्याप्त आकार का लक्ष्य बफर देना होगा (जो कि चेक नहीं है, तो इसका इस्तेमाल अक्सर पसंद किया जाता है)। चूंकि यह आकार संकलन समय पर अनिर्धारित है, इसलिए आपको दो स्ट्रिंग्स की लंबाई की गणना करने के लिए मजबूर किया जाता है, जिसे आप एक दूसरे को संलग्न करना चाहते हैं और new या malloc के साथ पर्याप्त आकार के बफर आवंटित करें। कोड>।

हालांकि, C ++ में एक स्ट्रिंग कॉन्टैनेशन करने का सबसे आसान तरीका सी के समकक्षों के बारे में सब भूल जाता है और बस :: std :: string का उपयोग करें: / P>

  :: std :: string s = "हैलो"; s + = "दुनिया";    

Comments

Popular posts from this blog

c# - passing input text from view to contoller with FacebookContext using Facebook app -

ios - Does Core Data autoupdate a many to many relationship on saving -

Calling a C++ function from C# by passing a string with variable size to it -