2013-05-10 5 views
0

도와주세요 .. 왜이 C 프로그램이 문자열을 뒤집지 않습니까? 그것은 충돌 ...하지만 난 문자 배열을 사용할 때 코드가 난 소름을주는 string..its에 대한 포인터를 사용하는 순간을 fine..but 작동하는 것 같다 ... 내가이 문제를 해결하는 데 도움이 ..C 문자열을 반대로

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

int main(){ 

    char *String="gokul"; 
    char *Begin =String; 
    char *End = String + strlen(String) - 1; 
    char TempChar = '\0'; 

    while (Begin < End) 
    { 
     TempChar = *Begin; 
     *Begin = *End; 
     *End = TempChar; 
     Begin++; 
     End--; 
    } 
    puts(String); 
} 
+0

왜 'strcmp'를 사용하지 않습니까? –

+3

strcmp()는 가능한 어떤 용도로 사용됩니까? 그는 아무것도 비교하지 않고, strrev()를 에뮬레이트하려고합니다. (문자열 문자열이 상수이기 때문에 여전히 작동하지 않습니다). –

+0

@LeeDanielCrocker :'strcmp'가 어떻게 작동하는지 알고 있습니까? 여기를 참조하십시오 : http://www.tutorialspoint.com/ansi_c/c_strcmp.htm OP의 while 루프 –

답변

4

String은 읽기 전용 메모리에있는 문자열 리터럴을 가리키고 있습니다. String에 대한 포인터를 계속 사용할 수는 있지만 수정할 수있는 메모리를 가리켜 야합니다.

char gokul[] = "gokul"; 
char *String = gokul; 

편집은 몇 가지 사소한 문제를 해결합니다.

프로그램에 비표준 헤더 conio.h을 포함시킬 필요가 없습니다.

코드는 String이 NULL 인 경우를 처리하지 않습니다.

String이 빈 문자열 인 경우 루프가 기술적으로 올바르지 않습니다. End은 문자열 앞을 가리키기 때문입니다.

main()은 그렇게 선언되었으므로 값을 반환해야합니다. 0은 성공을 나타냅니다. 최신 C 컴파일러는 최신 C 표준을 통해 프로그램이 main()의 끝에 도달 할 때 암시 적으로 0을 반환한다는 의미로 반환하지 않을 수 있음을 알게됩니다.

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

int main(){ 

    char gokul[] = "gokul";  
    char *String=gokul; 

    if (String && *String) { 
     char *Begin =String; 
     char *End = String + strlen(String) - 1; 
     char TempChar = '\0'; 

     while (Begin < End) 
     { 
      TempChar = *Begin; 
      *Begin = *End; 
      *End = TempChar; 
      Begin++; 
      End--; 
     } 
     puts(String); 
    } 
    return 0; 
} 
+0

그건 그 사람의 문제와는 아무런 관련이 없으므로 나는 그 문제를 완전히 놓쳤다 고 생각합니다. –

+2

@ 0A0D : 어떻게 그렇게? Poster says :'String'을 위해 배열을 사용할 때 작동합니다.'String'이 포인터 일 때 실패합니다. 그/그녀는 '문자열'을 제자리에서 되돌리려 고합니다. – jxh

+0

그것의 불완전한 대답과 그의 프로그램에 여러 문제를 해결하지 않기 때문에. 예'char *'는 읽기 전용이지만 여기에 더 많은 것이 있습니다. –