Как упоминалось в torstenvl, "cat"
и "dog"
являются строковыми литералами, поэтому здесь вы не используете функцию правильно.Первый параметр - это место назначения, второй параметр - это источник, а третий параметр - количество копируемых байтов.
char *strncpy(char *restrict s1, const char *restrict s2, size_t n)
Источник: Базовая спецификация открытой группы - strncpy
Чтобы ответить на ваш конкретный вопрос: да;нулевой терминатор копируется в строку назначения.n
байтов записывается, и если ваша исходная строка s2
короче n
байтов, NULL
заполняется до тех пор, пока не будет записано n
байтов.
В вашем вопросе это выглядит такВы пытаетесь добавить две строки.Чтобы сделать это в C, вам нужно сначала выделить буфер исходной строки, скопировать первую строку, а затем скопировать вторую строку, начиная с конца второй строки.В зависимости от того, где вы начнете последний шаг, вы можете указать «catdog \ 0» или «cat \ 0dog \ 0».Это еще один пример типичной ошибки «выключено одним».
Для начала вам нужно рассчитать длину двух строк, которые вы хотите добавить.Вы можете сделать это, используя strlen
, от string.h
.strlen
не не считает нулевой терминатор как часть длины, поэтому помните, что для получения длины последней строки вам нужно будет сделать strlen(s1) + strlen(s2) + 1
.
Затем вы можете скопировать первую строку, как обычно.Самый простой способ сделать вторую копию - это сделать:
char* s2start = finalString[strlen(s1) + 1];
Затем вы можете сделать strncpy(s2start, s2, [the size of s2])
, и тогда вы поймете, что начинаете прямо с нулевого терминатора s1, избегая "cat \"Ошибка 0dog.
Надеюсь, это поможет, удачи.