Как можно написать код который скопирует n первых букв стринга без использования strncpy?
Помогите пожалуйста как можно написать код в Си который скопирует определенное количество букв первого стринга и как бы используя эти буквы создаст новый стринг? Как функция strncpy, только без ее использования? Заранее спасибо большое
Ответы (2 шт):
Как то так
n - нужное кол-во символов str - исходная строка
int len = strlen(str);
if (n > len) n = len;
char* new_string = malloc(n+1);
for (int i = 0; i < n; i++) {
new_string[i] = str[i];
}
new_string[n] = '\0';
Знаете чем прекрасно открытое программное обеспечение? Тем что есть доступ к исходному коду. В том числе к исходному коду функции strndup в стандартной библиотеке языка С. Хотя этот код имеет особенности связанные с его "библиотечностью" и использует нестандартные функции вроде strnlen, идею понять легко.
На "человеческом" C получится что-то вроде такого: отмеряем сколько байт копировать, выделяем буфер на единицу большего размера, копируем, добавляем ноль:
char *dup_n(const char *s, size_t n) {
// сколько байт будем копировать?
const size_t len = strlen(s);
const size_t m = (n <= len) ? n : len;
// выделяем новую строку, не забываем место под завершающий ноль
char *dup = malloc(m + 1);
// обработка нехватки памяти
if (dup != NULL) {
// копируем нужое число байтов
memcpy(dup, s, m);
// завершаем новую строку нулем
dup[m] = '\0';
}
// готово
return dup;
}