2013-12-08 1 views
1

을 구현하는 가장 좋은 방법 : 주요 기능에나는이 같은 strcpy를 함수를 호출 할 경우 strcpy를 기능

char *s = NULL; 
strcpy(&s, "Test"); 

을이 그것의 최선의 구현이 될 것이다 : 또는 더 나은 방법을이 함수를 구현합니까? 감사합니다.

+0

더 나은 호출하는'strdup'을, 기능은'매우 다르기 때문에 strcpy'. –

답변

2

우선 : sizeof(src)을 가져 가면 문자열이 아닌 포인터 용 메모리가 할당됩니다. 32 비트 환경에서는 필요에 따라 10 바이트가 아닌 4 바이트의 메모리가 남게됩니다.

따라서, 당신은 당신의 두 번째 인수에서 당신이 필요합니까 얼마나 많은 메모리를 공급하거나 infere해야합니다 이런 식으로 뭔가 :

void str_cpy(char** dest, const char* src){ 
    if (*dest == NULL) *dest = malloc(strlen(src)+1); 
    else *dest = realloc(*dest, strlen(src)+1); 
    memcpy(*dest, src, strlen(src) + 1); 
} 
+1

맞습니다 :'realloc()'을 호출하는 것으로 충분합니다. 에러 처리에 대해서, 원래의'strcpy()'함수는 목적지 문자열에 대한 포인터를 반환합니다. 너도 똑같을거야. –