У меня проблемы с strncpy. Я пытаюсь разбить строку из 8 символов на две (первые 6 символов в одной подстроке, а затем оставшиеся 2 символа в другой). Чтобы проиллюстрировать особую сложность, я упростил свой код до следующего:
include stdio.h
include stdlib.h
include string.h
define MAXSIZE 100
struct word {
char string[8];
char sub1[2];
char sub2[6];
};
typedef struct word Word;
int main(void)
{
Word* p;
p=(Word*)malloc(MAXSIZE*sizeof(Word));
if (p==NULL) {
fprintf(stderr,"not enough memory");
return 0;
}
printf("Enter an 8-character string: \n");
scanf("%s",p->string);
strncpy(p->sub2,p->string,6);
strncpy(p->sub1,p->string,2);
printf("string=%s\n",p->string);
printf("sub1=%s\n",p->sub1);
printf("sub2=%s\n",p->sub2);
free(p);
return 0;
}
У пользователя запрашивается ввод. Предположим, они вводят «12345678». Тогда результат программы:
string=1234567812123456
sub1=12123456
sub2=123456
Результат, который я ожидаю, будет следующим:
string=12345678
sub1=12
sub2=123456
Я не понимаю, как strncpy, кажется, добавляет числа в строку ... Очевидно, я недостаточно хорошо понимаю strncpy, но кто-нибудь может мне объяснить, что происходит?