में regexec/strtok_r का उपयोग करते समय सेगमेंटेशन गलती मुझे यह पता लगाने में समस्याएं आ रही हैं कि मुझे कहां और क्यों सेगमेंटेशन गलती मिल रही है।सी
int main(void){
char RegExp[50];
regex_t CompiledRegExp;
char *para;
char delim[] = ".!?,";
char *sentence;
char *ptr1;
printf("Enter regular expression: ");
fgets(RegExp, 50, stdin);
if (regcomp(&CompiledRegExp,RegExp,REG_EXTENDED|REG_NOSUB) != 0) {
printf("ERROR: Something wrong in the regular expression\n");
exit(EXIT_FAILURE);
}
printf("\nEnter string: ");
strtok_r से किसी के साथ स्ट्रिंग विभाजित करने के लिए प्रयोग किया जाता है:
मैं एक सी कोड है कि इनपुट करने के लिए एक नियमित अभिव्यक्ति उपयोगकर्ता को संकेत देता है और यह संकलन और उसके बाद कई वाक्य के साथ एक स्ट्रिंग दर्ज लिख रहा हूँ निम्नलिखित delimiters।,? और फिर जिसके परिणामस्वरूप टोकन (वाक्य) regexec समारोह है कि यह खोज में स्ट्रिंग पैरामीटर के रूप में प्रयोग किया जाता है, तो नियमित अभिव्यक्ति पहले से संकलित टोकन के भीतर निहित है देखने के लिए:
if(fgets(para, 1000, stdin)){
char *ptr = para;
sentence = strtok_r(ptr, delim, &ptr1);
while(sentence != NULL){
printf("\n%s", sentence);
if (regexec(&CompiledRegExp,sentence,(size_t)0,NULL,0) == 0) {
printf("\nYes");
} else {
printf("\nNo");
}
ptr = ptr1;
sentence = strtok_r(ptr, delim, &ptr1);
}
}
regfree(&CompiledRegExp);
}
यह शायद एक मूर्खतापूर्ण गलती मैं हूँ बनाना लेकिन segfaul के कारणों का पता लगाने में कोई मदद की सराहना की जाएगी!
संपादित करें:regfree
अधिक उपयुक्त स्थान पर स्थानांतरित किया गया। हालांकि, segfault अभी भी हो रहा है। मुझे पूरा यकीन है कि इसमें कुछ अभिव्यक्ति है कि नियमित अभिव्यक्ति को कैसे पढ़ा जा रहा है या इसकी तुलना regexec
में कैसे की जा रही है। हालांकि, मूर्खतापूर्ण।
डीबगर के बारे में क्या? –
डीबगिंग के लिए प्रोग्राम को संकलित करें और प्रोग्राम को डीबगर के तहत चलाएं। डीबगर आपको बताएगा कि वास्तव में क्या हुआ। – wallyk
जीडीबी डीबगर मुझे कोई विनिर्देश नहीं देता है - सिर्फ दावा करता है कि एक segfault – higz555