Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

Как скопировать массив в динамический массив? (Си)

#c #массивы #указатели #malloc


Есть массив char str[] = "abcdef";

И динамический массив:
char *dstr = (char*)malloc(sizeof(char) * N);

Как скопировать str[] в dstr[] ? 

P.S. Заранее извиняюсь, если вопрос глупый.
    


Ответы

Ответ 1



Есть 3 способа, нативное копирование области памяти, специальной функцией копирования строк, посимвольный перебор массива и запись в dstr. memcpy(&str, &dstr, strlen(str) + 1); // Копирование области памяти strcpy(dstr, str); // Специальная функция для строки // Перебор массива циклом. int strsize = strlen(str) + 1; for(int i = 0; i < strsize ; i++) { dstr[i] = str[i]; } Имейте ввиду, в обоих случаях вы должны быть уверены что размер dstr больше на 1 чем длина строки str.

Ответ 2



В данном случае (создание копии строки, не содержащей двоичных нулей) проще всего (а если размер исходной строки не известен, то и не менее эффективно, чем использование malloc с последующими вызовами strlen, а затем strcpy или memcpy) вызвать strdup Например: #include ... char str[] = "abcdef"; char *dstr = strdup(str); Конечно, возвращаемый указатель стоит проверить на NULL (аналогично использованию malloc).

Комментариев нет:

Отправить комментарий