У меня возникли трудности с strncpy. Я пытаюсь разбить строку из 8 символов по два (первые 6 символов в одной подстроке, а затем остальные 2 символа в другой). Чтобы проиллюстрировать конкретную трудность, я упростил свой код к следующему:вопрос strncpy (язык C)
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 достаточно хорошо, но может ли кто-нибудь объяснить мне, что происходит?
Вы хотите, конечно, избавиться от этого malloc cast! http://c-faq.com/malloc/mallocnocast.html – user502515