2013-05-07 4 views
0

나는 간단한 역방향 문자열 프로그램을 작성하고 위의 오류를 얻으려고합니다. 나는 내가 뭘 잘못하고 있는지 이해할 수 없다.처리되지 않은 예외가 액세스 위반 쓰기 위치에

void reverse(char *str) { 
char *end, *begin; 
end = str; 
begin = str; 

while (*end != '\0') { 
    end++; 
} 

    end--; 

char temp; 

while (begin < end) { 
    temp = *begin; 
    *begin++ = *end; //This is the line producing the error 
    *end-- = temp; 
} 
} 

void main() { 
char *str = "welcome"; 
reverse(str); 
} 

도움이 필요합니다. 감사.

답변

1

문자열 리터럴을 수정하려고합니다. 이것은 정의되지 않은 동작입니다. 또한

char str[] = "welcome"; 

, 당신은 str의 시작 부분에 end를 할당하고 다음이 일을하고 있습니다 :

end--; 

를 수정하기 원한다면이 mainstr 선언의 유효한 방법이 될 것이다 이는 문자열에 할당 된 메모리보다 포인터를 감소시키고 이는 정의되지 않은 동작입니다. 이 작업을 수행하는 의미 그것은 내 생각은 :

end = str+ (strlen(str)-1); 
+0

죄송합니다, 제가합니다 (end-- 전에) 지금 업데이 트됩니다, 몇 가지 코드를 복사하는 것을 잊었다 –

+0

귀하의 솔루션을 도왔다. 이 방법으로 문자열을 초기화해야하고 프로그램이 작동했습니다. 고맙습니다. –

관련 문제