2013-05-06 3 views
0

문자열을 뒤집기위한 코드를 작성했습니다. 나는 논리가 맞다고 생각한다. 나는 그것을 컴파일 할 수는 있지만 실행할 수는 없다. Windows에서 MinGW를 사용하려고합니다. 누군가 문제가 무엇인지 지적 할 수 있습니까?MinGW에서 실행되지 않는 문자열 반전

void reverse(char * start, char * end){ 
    char ch; 
    while(start != end){ 
     ch = *start; 
     *start++ = *end; 
     *end-- = ch; 
    } 
} 

int main(){ 
    char *c = (char *)"Career"; 
    int length = strlen(c); 
    reverse(c,c+length-1); 
} 

감사

+1

그래서 주제가 컴파일되지 않는다고하지만 시체는 컴파일 할 수는 있지만 실행할 수 없다고 말합니다. 어느 것이고, 당신이 가진 문제에 대해 더 구체적으로 말할 수 있습니까? 또한'char * c = (char *) "Career"; "는 메모리의 읽기 전용 문자열이 될 것입니다. 'char c [] = ....'로 선언 해보십시오. – Joe

+1

"문제가 무엇인지 지적 해 줄 수 있습니까?" - 예 : 문제는 설명이 잘못되어 어떤 오류가 발생했는지 설명하지 못하는 것입니다. –

+0

그리고 수정이 가능하면'std :: reverse'를 사용하십시오. – chris

답변

5

당신은 당신의 함수에 문자를 전달하고 리터럴을 수정하려고 시도중인 정의되지 않은 동작입니다 :

은 여기에 전체 작업 버전입니다.

은 수정 문자열과 같이하십시오 : 당신이 당신의 문자열의 문자 홀수가있을 때 그 위에

char c[] = "Career"; 

reverse 만 작동합니다. 귀하의 while 상태가 잘못되었습니다. 그것은해야한다 :

while(start != end) 

을하고 문자열이 문자의 짝수가있는 경우, 그 조건은 항상 true입니다 :

while(start < end) 

코드는 말했다. 따라서 startend이 입력 문자열 외부를 가리 키기 때문에 세그먼트 오류가 발생할 때까지 반복됩니다.

+0

도움을 주셔서 감사합니다 .. – Fox

4

당신은 그것을 읽기 전용 메모리에 배치됩니다 문자부터 문자열을 변경할 수 없습니다.

시도 코드를 컴파일하지 않은 이유는 당신이 strlen 함수를 정의 파일의 상단에

#include <string.h> 

를 추가 할 필요가 있다는 것입니다 c

+0

변경 사항을 만들었지 만 여전히 실행되고 있지 않습니다 .. "a.exe"가 작동을 멈췄습니다. 오류가 없습니다 ... – Fox

0

char c[] = "Career";로 선언.

또한

while(start != end){ 

문자 짝수 긴 문자열에 대한

Segmentation fault (core dumped) 

오류를 생성한다.

while(start < end){ 

로 변경이 그 오류가 멀리 갈 것입니다.

#include <stdio.h> 
#include <string.h> 

void reverse(char * start, char * end){ 
    char ch; 
    while(start < end){ 
     ch = *start; 
     *start++ = *end; 
     *end-- = ch; 
    } 
} 

int main(){ 
    char c[] = "Career"; 
    int length = strlen(c); 
    reverse(c,c+length-1); 
    printf("c=%s\n", c); 
}