c언어 질문있습니당~!

조회수 800회

메인함수에 정의된 str 문자열 내에서 공백문자를 없애고 출력을 하려했습니다. erase_blanks함수를 통해서요. 이때, erase_blanks함수 내에서 temp변수를 정의하여 공백을 제거한 문자열을 복사했습니다. 그리고 str에 temp의 주소값을 넘겨주고 이 함수를 빠져나가면 temp는 지역변수라 사라져 결과값은 띄어쓰기 있게 나오게 되었습니다. 어떻게 수정해야 할까요? ㅠ

void erase_blanks(char* str) {
    char* temp = (char*)malloc(sizeof(char)*BUFFER_LENGTH);
    int i = 0;
    int j = 0;
    while (str[i] != '\0') {
        if (str[i++] != ' ') {
            temp[j++] = str[i - 1];
        }
    }
    temp[j] = '\0';
    str = temp;
}

int main(void) {
    char* str = "aef aefe e ";
    erase_blanks(str);
    printf("%s", str);
        return 0;
    }
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 문자열 복사에는 <string.h>strcpy()를 사용합니다.
    함수 원형은 다음과 같습니다.

    #include <string.h>
    char *strcpy(char *string1, const char *string2);
    

    string2를 string1에 복사하는 라이브러리 함수이며 string2에는 널 문자(\0)를 포함해야 합니다.

    다음과 같이 바꿔보세요.

    void erase_blanks(char* str) {
        char* temp = (char*)malloc(sizeof(char)*BUFFER_LENGTH);
        int i = 0;
        int j = 0;
        while (str[i] != '\0') {
            if (str[i++] != ' ') {
                temp[j++] = str[i - 1];
            }
        }
        temp[j] = '\0';
        strcpy(str, temp);
    }
    
    int main(void) {
        char str[BUFFER_LENGTH] = "aef aefe e ";
        erase_blanks(str);
        printf("%s", str);
            return 0;
    }
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)