c언어 질문있습니당~!

메인함수에 정의된 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답변

  • 좋아요

    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;
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.