文字配列の入力がうまくいかず困っています。
どなたかご教授いただけませんか。
内容は以下の通りです。
#include <stdio.h>
void main(void);
void main(void)
{
char str[256]; /* char 型の変数の配列の宣言 */
printf("文字を幾つか入力して下さい ");
scanf_s("%s", str);
printf("あなたの入力した文字は %s です。\n", str);
}
この内容でデバックなしで開始をしたところ
「あなたの入力した文字は” ”です」
となり、入力した文字が反映されません。
どなたか原因などわかりませんかね…
試してないですが、原因はこんなところにあるんじゃないかと思います。
scanf および wscanf とは異なり、scanf_s および wscanf_s では、c、C、s、S の各型、または [] で囲まれた文字列コントロール セットのすべての入力パラメーターに対してバッファー サイズを指定する必要があります。 バッファー サイズ (文字単位) は、バッファーまたは変数のポインターの直後に追加パラメーターとして渡されます。 たとえば、文字列を読み込む場合、その文字列のバッファー サイズは次のように渡されます。
char s[10];
scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9バッファー サイズには、終端 null も含まれます。 幅指定フィールドを使用して、読み取られたトークンがバッファーに確実に収まるようにすることができます。 幅指定フィールドが使用されない場合で、読み取られたトークンがバッファーに収まらない場合、そのバッファーには何も書き込まれません。
scanf_s縲\scanf_s_l縲『scanf_s縲\wscanf_s_l
なので、こういうふうに修正すれば良いのじゃないかな、と。
char str[256]; /* char 型の変数の配列の宣言 */ printf("文字を幾つか入力して下さい "); scanf_s("%255s", str); /* %s に、サイズが必要 */
えーと、
scanf_s("%s",str,256);
でうまくいきませんか?
あ、三つめの引数が必要なのか。
マニュアルまで見ておいて、無惨 orz
scanf_s("%s",str,256)
でうまくいきました…
知識が浅く、ご迷惑をおかけしました><
ありがとうございます!
ほくが書いた書き方だと、引数がひとつ足りないはずです。
2014/07/09 19:08:24No.2 の回答にあるように、さいずがその後に続きます。
# と、ぼくがマニュアルから引用した箇所にも書かれてます orz
"%255s", str,256
2014/07/18 15:48:14の形でうまくできました!
丁寧な説明どうもありがとうございました!!