2016-07-24 2 views
-1

strlen()strrev() 기능을 사용하지 않고 문자열을 역순으로 변환하는 프로그램입니다. 이 코드와 관련하여 도와주십시오 : length 함수는 11을 나타내지 만 reverse 함수는 작동하지 않습니다.왜이 문자열 역방향 프로그램이 작동하지 않습니까?

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

int length(char*); 
char *reverse(char*); 

main() { 
    printf("%d", length("himanshupal")); 
    printf("%s", reverse("himanshupal")); 
    getch(); 
} 

/* used to calculate the lenghth*/ 
int length(char *p) { 
    int l; 

    for (l = 0; *(p+l) != '\0'; l++); 
    return (l); 
} 

char *reverse(char *p) { // function for reversing the string 
          // l used for length 
    int i, l; 
    char t; 

    for (l = 0; *(p+l) != '\0'; l++); 
    for (i = 0; i < l/2; i++) { 
     t = *(p+i); 
     *(p+i) = *(p+l-1-i); 
     *(p+l-1-i) = t; 
    } 
    return (p); 
} 
+0

같은 기능의 길이가, 당신이 무엇을 의미합니까 선언 낫다는 것을 고려? 빌드 오류가 발생합니까? 그런 다음 정확한 오류를 게시하십시오. 충돌이 발생합니까? 그런 다음 디버거를 실행하여 발생 위치를 찾습니다. 예기치 않은 결과가 나옵니까? 그런 다음 실제 및 예상 출력을 보여주십시오. 또한 [좋은 질문을하는 방법에 대해 읽어보십시오.] (http://stackoverflow.com/help/how-to-ask). –

+2

문자열 리터럴의 타입은'const char *'입니다. 어쨌든 프로그램을 컴파일하는 것은 모든 C 프로그래머가 Hard Way를 배워야하는 비극입니다. –

+0

내 프로그램을 length.exe로 저장합니다. 실행 길이 함수 후 11 보여줍니다.하지만 녹색 라인 실행 후 팝업 창이 표시하고 length.exe가 제대로 실행되지 않는 것을 보여줍니다 –

답변

1

문자열 리터럴은 C 및 C++에서 불변합니다. 문자열 리터럴을 수정하려고하면 정의되지 않은 동작이 발생합니다. :)

대신 문자 배열을 사용하십시오. 예를 들어

int main(void) 
    //^^^^^^^^^^^^^^ 
    { 
     char s[] = "himanshupal"; 
     printf("%d\n", length(s)); 
     printf("%s\n", reverse(s)); 
     getch(); 
    } 

은 당신이 프로그램이 작동하지 않는 말할 때

size_t length(const char *); 
+0

형제님께 감사드립니다. 내 코드에서 무엇이 잘못 되었습니까? –

+0

@HimanshuPal printf ("% s", reverse ("himanshupal")) 호출에서 문자열 리터럴을 사용하고 있습니다. 함수 reverse는 그것을 바꾸려고 시도합니다. –

+0

어떤면에서 통화가 변경됩니까? –

관련 문제