2011-03-25 2 views
-1

누군가이 코드의 잘못된 점을 말해 줄 수 있습니까? 주요C++ 포인터 질문

는 :

Book* test = new Book; 

char* end = "HelloThere"; 

test->reverseCString(end); 



char* Book::reverseCString(char* woot) 
{ 
    char* end = woot; 

    while (*end) 
    { 
     end++; 
    } 
    end--; 
    // Now we end is at the last letter 
    // and woot is at the first 
    // now we swap them 
    char temp; 
    while (woot < end) 
    { 
     temp = *woot; 
     *woot++ = *end; <--- Problem here during runtime. 
     *end-- = temp;  
    } 
    return woot; 
} 
+0

문제가 있습니까? 어떤 종류의 문제? 오류 메시지 또는 추가 정보가 있습니까? –

+2

이 함수를 어떻게 부르시겠습니까? woot도 쓰기 가능합니까? – Michael

+1

또한 기술적으로 이것은 빈 문자열에서 호출 될 때 UB를가집니다. 배열의 시작 전에 하나의 포인터를 작성해도 다른 포인터와 비교할 필요는 없습니다. 나는 그것이 당신의 문제라고 생각합니다. –

답변

3
char* end = "HelloThere"; 

문자열 리터럴 "HelloThere"는 읽기 전용 위치에 있으며 수정할 수 없습니다. 이제 끝

char* Problems::reverseCString(char* woot) 
{ 
    // Both woot and end are pointing to the string literal stored in 
    // read only location. 
} 
+0

@RoR - 위의 힌트를 사용하여 논리를 다시 작성하십시오. – Mahesh

+0

감사합니다. – RoR

+0

@RoR gcc4.3이이 문제에 대해 불만을 제기 해 주셔서 감사합니다 : 경고 : 사용되지 않는 문자열 상수에서 'char *'로의 변환 – Neil

2

constchar* end = "HelloThere";

것을 당신을 고정.

이제 문자열을 복사 할 수있는 곳으로 복사하는 방법을 알아보십시오.

2
char end[] = "HelloThere"; 

쓸 수, 당신은 그것을 취소 할 수 있습니다.

0

태그가 C++이므로 C++ 표준 라이브러리를 사용하지 않는 이유는 무엇입니까?

std::string s = "Hello There"; 
std::reverse(s.begin(), s.end());