1. ホーム
  2. c

[解決済み] なぜstrcpyの代わりにstrncpyを使うべきなのでしょうか?

2023-01-17 20:43:36

質問

編集:例のソースを追加しました。

私が出会ったのは この例 :

char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );

とすると、このような出力が得られます。

目的地は元々 = 'abcdefg' です。
strcpyの後、destinationは'123456789'になります。

destination1は元々='abcdefg'です。
strncpyの後、destination1は'12345fg'になります。

となると、なぜこのような効果を求める人がいるのか不思議です。混乱を招くような気がします。このプログラムでは、基本的に誰かの名前 (例: Tom Brokaw) を Tom Brop763 でコピーすることができると思われます。

を使用する利点は何ですか? strncpy() 以上 strcpy() ?

どのように解決するのですか?

strncpy は、長さを入れることを要求することで、バッファオーバーフローに対抗しています。 strcpy は、末尾の \0

n

n