strncpy に問題があります。8 文字の文字列を 2 つに分割しようとしています (最初の 6 文字を 1 つの部分文字列に、残りの 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 を十分に理解していませんが、何が起こっているのか説明してもらえますか?