2011-03-07 14 views
5

मैं एक स्ट्रिंग को पलटने के लिए सी में निम्नलिखित समाधान के साथ आए हैं segfaulting उल्टा।सी समाधान में एक स्ट्रिंग

*head++ = *end; 

लाइन जबकि पाश की पहली यात्रा पर segfaults: GDB के अनुसार, हमलावर लाइन इस प्रकार है। स्ट्रिंग "टी" के अंतिम चरित्र और स्ट्रिंग की शुरुआत के लिए प्रमुख बिंदुओं के अंत बिंदु। तो यह क्यों काम नहीं कर रहा है?

+1

अंत में '\ 0' जोड़ें। – malinois

+5

\ 0 स्ट्रिंग अक्षर में स्वचालित है – Erik

उत्तर

32

बदलें

char * s = "sample text"; 

char s[] = "sample text"; 

करने के लिए "नमूना पाठ" एक स्ट्रिंग शाब्दिक है जो पढ़ने में रहते हो सकता है:

ठीक करने के लिए यह एक चार सरणी बनाने s आपके पता स्थान के केवल खंड। सरणी सिंटैक्स का उपयोग करना सुनिश्चित करता है कि इस स्ट्रिंग को ढेर करने के लिए कॉपी किया गया है, जो लिखने योग्य है।

+1

कोडोडिक्ट के समान उत्तर के बजाय आपका ऊपर उठाना क्योंकि आप स्पष्टीकरण डालते हैं। – JeremyP

+0

बहुत रोचक .. स्पष्टीकरण के लिए धन्यवाद। – Sam

+0

शायद थोड़ा सा विषय, लेकिन केवल पढ़ने योग्य स्मृति में "नमूना पाठ" रखने का क्या फायदा है? अंतरिक्ष बचाने के लिए? – Jeff

11

आपका s एक स्ट्रिंग शाब्दिक की ओर इशारा करते है:

char * s = "sample text"; 

समारोह reverse में आप स्ट्रिंग शाब्दिक जो अपरिभाषित व्यवहार में जो परिणाम को संशोधित करने की कोशिश कर रहे हैं।

char s[] = "sample text"; 
संबंधित मुद्दे