1404884389 C++でプログラムの勉強をしています。

文字配列の入力がうまくいかず困っています。
どなたかご教授いただけませんか。

内容は以下の通りです。



#include <stdio.h>

void main(void);

void main(void)
{
char str[256]; /* char 型の変数の配列の宣言 */

printf("文字を幾つか入力して下さい ");
scanf_s("%s", str);

printf("あなたの入力した文字は %s です。\n", str);
}


この内容でデバックなしで開始をしたところ


「あなたの入力した文字は”  ”です」

となり、入力した文字が反映されません。


どなたか原因などわかりませんかね…

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/07/09 14:39:49
  • 終了:2014/07/16 14:40:03

回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4521ベストアンサー獲得回数18792014/07/09 15:11:06

試してないですが、原因はこんなところにあるんじゃないかと思います。

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 に、サイズが必要 */
他2件のコメントを見る
id:a-kuma3

ほくが書いた書き方だと、引数がひとつ足りないはずです。
No.2 の回答にあるように、さいずがその後に続きます。

# と、ぼくがマニュアルから引用した箇所にも書かれてます orz

2014/07/09 19:08:24
id:los19

"%255s", str,256
の形でうまくできました!
丁寧な説明どうもありがとうございました!!

2014/07/18 15:48:14
id:sasada No.2

sasada回答回数1482ベストアンサー獲得回数1332014/07/09 15:20:19

えーと、

scanf_s("%s",str,256);

でうまくいきませんか?

id:a-kuma3

あ、三つめの引数が必要なのか。
マニュアルまで見ておいて、無惨 orz

2014/07/09 15:33:03
id:los19

scanf_s("%s",str,256)
でうまくいきました…
知識が浅く、ご迷惑をおかけしました><
ありがとうございます!

2014/07/18 15:50:11
  • id:Vacuum
    scanf はつかわずに…
    fgets(str,256,stdin);
    *strchr(str,0x0d)=0x00;

    でもいいのでは?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません