C언어 메모리 동적할당 후 무자열 복사 하기 질문입니다!

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

int str_copy(char *str2, char *str1);
int str_len(char *str1);
int str_func(char **str2, char *str1);

int main(){
    char str1[50]="I Love Chewing C hahaha";
    char *str2;
    char *str3;

    str_func(&str2,str1);
    str_func(&str3,"hello");

    printf("%s\n",str1);
    printf("%s\n",*str2);
    printf("%s\n",*str3);

    free(str2);
    free(str3);

    return 0;
}

int str_func(char **str2, char *str1){
    str2=(char **)malloc(str_len(str1)*sizeof(char *)+1);
    str_copy(*str2,str1);

    return 0;
}

int str_len(char *str1){

    int count=0;
    while(*str1){
        str1++;
        count++;
    }
    return count;
}

int str_copy(char *str2, char *str1){
    while(*str1){
        *str2=*str1;
        str2++;
        str1++;
    }
    *str2='\0';

    return 0;
}

위 코드는 str1 문자열을 str2 로 복사하고 마찬가지로 str3로 hello 라는 문자열을 복사 받는 작업입니다. str2 와 str3 를 직접 복사 받고 싶은 문자열의 길이만큼 메모리를 동적 할당 한 후에 str1,str2,str3 세개의 문자열을 출력 하고 싶어서 만들어 봤는데 실행이 안되서요 ㅠ 문자열의 길이를 구하는함수(str_len) 와 문자열을 복사하는 함수(str_copy) 그리고 그 두작업과 메모리를 할당하는 하나의 함수(str_func)를 이용해서 문제를 풀어 보고 싶은데 오류는 뜨지 않지만 실행이 안되네요..ㅠ 위 코드의 문제점이나 더 좋은 방법 등 피드백좀 받고 싶습니다! 오늘 이 싸이트 처음 이용해 보는데 실력자 분들이 많은 것 같아서요 부탁드립니다!!

  • malloc 를 str_func함수안에서 처리하면 해제를 할 수 없게 됩니다. main 에서 메모리 할당하고 사용후 해제해야 합니다.(이것이 가장 기본이 되는 설계(할당한 곳에서 해제)입니다.) 정영훈 2019.12.22 20:33
  • 기본적인 개념이 부족한걸 느끼고 갑니다. 담변 감사드립니다! 알 수 없는 사용자 2019.12.22 23:46

1 답변

  • int str_func(char **str2, char *str1){
        str2=(char **)malloc(str_len(str1)*sizeof(char *)+1);
        str_copy(*str2,str1);
    
        return 0;
    }
    

    ->

    int str_func(char **str2, char *str1){
        *str2=(char *)malloc(str_len(str1)*sizeof(char)+1);
        str_copy(*str2,str1);
    
        return 0;
    }
    
    printf("%s\n",str1);
    printf("%s\n",*str2);
    printf("%s\n",*str3);
    

    ->

    printf("%s\n",str1);
    printf("%s\n",str2);
    printf("%s\n",str3);
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사드립니다. 제가 개념이 많이 부족하다는걸 확실하게 느끼고 가네요. 기초적인 부분부터 흘리지않고 다시 공부 해야겠습니다. 물론 지금도 기초를 공부중이지만... 알 수 없는 사용자 2019.12.22 23:45

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

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

(ಠ_ಠ)
(ಠ‿ಠ)