[C] 연습으로 만들었는데, 계속 고민해봐도 왜 output이 이렇게 나오는지 모르겠어요. 쉬우시겠지만 조금 봐주세요.

조회수 660회
#include <stdio.h>
#include <stdlib.h>

char *Mystrrev(char *string) {
    char *NewStr = NULL;
    int count = 0;

    for (int i = 0; string[i] != '\0'; i++) count++;

    NewStr = (char*)calloc(count, sizeof(char));

    for(int j = 0; count > 0; j++){
        NewStr[j] = string[count];
        count--;
    }

    free(NewStr);
    return NewStr;
}

int main(void) {
    char *str[3] = { "Hello", "World", "String" };
    char* *ppstr = str;

    puts(Mystrrev(ppstr[1]));

}

안녕하세요! 혼자 책으로 공부하면서 만들어 본거예요! 정말 과제아니구

이게 에러도, 출력도 아무것도 안떠요. (정상적으로 작동은! 되요)

이 문제의 다른 분이 만드신 코드도 보긴 했지만 저는 이게 왜 안되는지 짚고 넘어가야될거 같은데

혼자 끙끙 앓고만 있고 진도가 도저히 안넘어가서 질문합니다.

(문제는 strrev( ) 함수랑 동일한 기능을 수행할수 있는 MyStrrev( ) 함수를 만들라는 거예요! )

감사합니다!!

2 답변

  • 아래 코드 참고하세요.

    • 코드
    #include <stdio.h>
    #include <stdlib.h>
    
    char* Mystrrev(char* string) {
        char* NewStr = NULL;
        int count = 0;
    
        for (int i = 0; string[i] != '\0'; i++)
            count++;
    
        NewStr = (char*)calloc(count + 1, sizeof(char));
    
        if (NewStr != NULL)
        {
            for (int j = 0; j < count; j++)
            {
                NewStr[j] = string[count - 1 - j];
            }
    
            NewStr[count] = '\0';
        }
    
        return NewStr;
    }
    
    int main(void) {
        char* p = NULL;
        char* str[3] = { "Hello", "World", "String" };
        char** ppstr = str;
    
        puts(ppstr[1]);
    
        p = Mystrrev(ppstr[1]);
        puts(p);
    
        free(p);
        p = NULL;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사합니다!! 저 혹시 p를 메모리 할당 해제하셨는데 이유가 무엇인가요? Newstr를 해제하려면 그렇게 해야되는건가요?? 알 수 없는 사용자 2020.9.12 17:44
    • 동적할당 받은 메모리를 더이상 사용하지 않을 것이라고 생각한 시점에서 free로 해제해야 합니다. 더 사용할 생각이라면 해제 안하셔도 됩니다. 알 수 없는 사용자 2020.9.12 19:46
  • 함수 안에서 NewStr의 공간을 해제 하시고 리턴하시네요. free(NewStr)의 위치를 고민해 보셔야 될 것 같습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)