1
マイC
コードは次のようである:バッファオーバーフローを避けるためにscanfで入力引数に値を割り当てることができないのはなぜですか?
#include <stdio.h>
#include <string.h>
int main(void) {
char s[10];
int i = 0, j = 0, k = 0;
memset(s, 0xff, sizeof(s));
scanf("%9s%d%d%d", s, &i, &j, &k);
printf("%s,%d,%d,%d\n", s, i, j, k);
}
、私はscanf
で%9s
を使用しています。
# ./test
short 1 2 3
short,1,2,3
長さが長い場合や10
、i
、j
とk
に等しい入力を取得することはできませんが。しかし、私は、入力文字列の長さが10
よりも短い場合、結果は私が期待しているようです見つけます: scanf
の行動を理解するための方法
# ./test
verylongstr 1 2 3
verylongs,0,0,0
?
10バイトを割り当ててそこに12バイトを入れると、あなたが得るものは純粋に偶然です。あなたはクラッシュ、間違った答え、正しい答え、あるいは鼻から飛び出す悪魔を得るかもしれません。コンパイラは、一度ルールを破ると、賢明なやり方をする義務はありません。 –
@LeeDanielCrockerこれは、彼が彼の質問で説明した '%9s 'の使用の要点です。 – Barmar