Скопируйте две части строки в две другие строки, используя strncpy - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу скопировать две части строки s в две строки a и b:

#include <stdio.h>
#include <string.h>
int main()
{
   char s[] = "0123456789ABCDEF";
   char a[10];
   char b[6];
   strncpy( a, s, 10 );
   a[10] = '\0';
   printf("%s\n", a);
   strncpy( b, s+10, 6 );
   b[6] = '\0';
   printf("%s  %s\n", a, b);
   return 0;
}

Результат:

0123456789
  ABCDEF

Я ожидал

0123456789
0123456789  ABCDEF

Что случилось с? Кто-нибудь может сказать мне, что не так?

1 Ответ

1 голос
/ 22 апреля 2020

Массивы a и b не содержат строк. Объявите их как

char a[11];
char b[7];

, то есть зарезервируйте еще один элемент для символа завершающего нуля.

В противном случае эти операторы

a[10] = '\0';
b[6] = '\0';

используют недопустимые индексы.

...