[解決済み] なぜ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
関連
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
initializer element is not constant "というエラーが表示されるのですが?
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?
-
[解決済み】なぜgets関数は危険で使ってはいけないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
#137: 式は変更可能なlvalueでなければならない問題 // 文字列配列の代入問題
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] C言語でchar配列をコピーする方法は?
-
[解決済み] Linux Socket write() によるBad File Descriptor C
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] mallocとcallocの違い?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?