人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++でプログラムの勉強をしています。
文字配列の入力がうまくいかず困っています。
どなたかご教授いただけませんか。

内容は以下の通りです。



#include <stdio.h>

void main(void);

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

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

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


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


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

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


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


1404884389
●拡大する


●質問者: こばしゅん
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3

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

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 に、サイズが必要 */

a-kuma3さんのコメント
MSDN のマニュアルは、日本語訳がちょっとおかしいように思います。 >> 幅指定フィールドが使用されない場合で、読み取られたトークンがバッファーに収まらない場合、そのバッファーには何も書き込まれません。 << 原文は、こう。 >> If no width specification field is used, and the token read in is too big to fit in the buffer, nothing is written to that buffer. << 英語では "and" でつながってますけど、「もしくは」と訳すべきだと思います。だって、幅指定が無ければ、バッファに収まるかどうかが、分からないのだから。 >> もし、フィールドの幅指定がされていない、もしくは、読み取られたトークンがバッファに収まらない場合、そのバッファには何も書き込まれません。 <<

こばしゅんさんのコメント
わかりやすい説明ありがとうございます! 今出先で確認できませんが でき次第もう一度報告します!ありがとうございます!

a-kuma3さんのコメント
ほくが書いた書き方だと、引数がひとつ足りないはずです。 No.2 の回答にあるように、さいずがその後に続きます。 # と、ぼくがマニュアルから引用した箇所にも書かれてます orz

こばしゅんさんのコメント
"%255s", str,256 の形でうまくできました! 丁寧な説明どうもありがとうございました!!

2 ● sasada

えーと、

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

でうまくいきませんか?


a-kuma3さんのコメント
あ、三つめの引数が必要なのか。 マニュアルまで見ておいて、無惨 orz

こばしゅんさんのコメント
scanf_s("%s",str,256) でうまくいきました… 知識が浅く、ご迷惑をおかけしました>< ありがとうございます!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ