c - Segmentation fault while separating tokens from a string -


  # शामिल हैं & lt; stdio.h & gt; # से & lt में शामिल हैं, string.h & gt; # से & lt में शामिल हैं, stdlib.h & gt; Int main (int argc, char * argv []) {char * args [10]; Int i = 0; चार स्ट्र [41], एस्ट्रस्ट [41]; // दो सरणियों को यहां घोषित कर दिया गया है [4] = ""; Printf ("कमांड दर्ज करें:"); Scanf ("% s", str); Memcpy (teststr, str, sizeof (str)); आर्ग्स [i] = स्ट्रॉटोक (teststr, सीमांकक); जबकि (आर्ग्स [i]! = नल) {printf ("args [% d] =% s", i, args [i]); i ++; आर्ग्स [i] = स्ट्रॉटोक (teststr, सीमांकक); } वापसी 0; }  

memcpy () एक सरणी को दूसरे में कॉपी करने के लिए एक फ़ंक्शन है स्ट्रोक () स्ट्रिंग को टोकन में विभाजित करने के लिए एक फ़ंक्शन है। हम इसे निरंतर रोप कर देंगे जब तक स्ट्रिंग में कोई टोकन नहीं छोड़ेगा। प्रत्येक टोकन 'argv []' में संग्रहित होता है जो एक चार सरणी होता है।

जबकि लूप चल जाएगा असीम रूप से arg [i] के रूप में है, जो कि पहला टोकन है, जबकि कंडीशनिंग पास से अनन्त होने के कारण होता है।

चूंकि आप scanf () को स्ट्रिंग में पढ़ने के लिए उपयोग कर रहे हैं, अगर स्ट्रिंग बहु शब्द है जो इसे अपना कोड नहीं पढ़ सकता है सभी टोकनों को पार्स नहीं कर सकता लेकिन केवल पहला शब्द मैं आपको बहु शब्द स्ट्रिंग पढ़ने के लिए नीचे fgets () का उपयोग करने का सुझाव देता हूं,

  यदि (fgets (str, sizeof str, stdin) == NULL) {; // संभाल EOF}  

यहां कार्य कोड है।


Comments