HelloWorld 동적할당 관련 질문입니다.

  • AlgoPrince
    AlgoPrince
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int num_testcase;
    char temp[50];
    char* name_pt[10];
    
    
    int main(void)
    {
        int i;
    
        scanf_s("%d", &num_testcase);
        //테스트 케이스의 개수를 받는다.
    
    
        for (i = 0; i < num_testcase; i++)
        {
            scanf_s("%s",temp, 50);
            //일단 temp에 받는다.
            name_pt[i] = (char*)malloc(strlen(temp));
            //동적할당을 위해 스트링 길이*1(sizeof(char))만큼 메모리       //확보
            strcpy_s(name_pt[i], strlen(temp), temp);
            //스트링 카피해서 원래 name 포인터에 저장
        }
    
        for (i = 0; i < num_testcase; i++)
            printf("Hello, %s!\n", name_pt[i]);
    
        for (i = 0; i < num_testcase; i++) { free(name_pt[i]); }
    
        return 0;
    }
    
    이렇게 했는데요.
    strlen(temp) 자체의 값은 잘 계산이 되어 나오는데 이 값을 아래 
    스트링 카피 두번째 인자로 집어넣으려고 하니 오류가 나네요. 
    그냥 정수 100을 length로 쓰면 잘 나오는데, 입력한 스트링에 
    딱 맞는 메모리를 할당해서 프로그램을 짜보고 싶어서요.
    
    고수님들의 조언 구합니다.

    8년 전
3개의 댓글이 있습니다.
  • furukawa_pan
    furukawa_pan

    strlen 함수는 NULL 을 포함하지 않은 길이를 return 합니다. http://linux.die.net/man/3/strlen


    8년 전 link
  • sgchoi5
    sgchoi5

    문자열 abc 를 위해서 필요한 공간은 abc + null character 해서 4 byte 공간이 필요합니다.
    문자열 처리함수들은 null character 를 가지고 해당 문자열의 끝을 판단하게 됩니다. 예를 들어, strlen 도 null character 를 전까지의 문자 개수인 거고요.


    8년 전 link
  • AlgoPrince
    AlgoPrince

    답변 감사합니다!! @furukawa , @sgchoi5


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.