2013-12-08 5 views
1

, если я бы назвал STRCPY функцию следующим образом:Лучший способ для реализации функции STRCPY

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

в основной функции, это было бы самое лучшее выполнение этого: или есть лучший способ реализовать функцию? Спасибо!

+0

Лучше вызов, 'strdup', так как функциональность очень отличается от' strcpy'. –

ответ

2

Прежде всего: если вы принимаете sizeof(src), вы будете выделять память для указателя, а не для строки. В 32-разрядных средах это оставит вас с 4 байтами памяти, а не 10, как вам нужно.

Таким образом, вам нужно предоставить, сколько памяти вам нужно, или 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()' возвращает указатель на строку назначения. Ваш может сделать то же самое. –

Смежные вопросы