• ベストアンサー

空白を含んだ文字列がうまく格納(表示)できない

こんにちわ。 空白(スペース)の入った文字列の格納(表示)について質問させてください。 以下のプログラムを実行すると、空白の含む文字列がうまく表示されません。 例えば、 in the worldと入力しても、inしか格納されていないみたいです。それはなぜでしょうか? また、どうすればそれを格納、表示させることができるのでしょうか?教えてください。よろしくお願いいたします。 #include <stdio.h> #include <string.h> main() { char buf[BUFSIZ]; char moji[31]; int i; printf("Input string: "); fgets(buf, sizeof(buf), stdin); moji[31] = '?0'; sscanf(buf, "%s", moji); i = 0; while (moji[i] != '?0') { printf("%c",moji[i]); i = i + 1; } printf("?n"); printf("%d letters?n", i); } 【実行例】 csx01:~> gcc prog.c csx01:~> a.out Input string: in the world in 2 letters

質問者が選んだベストアンサー

  • ベストアンサー
noname#17489
noname#17489
回答No.2

sscanf()などのscanf系統の関数は、空白を読み込みません。 したがって空白で区切られた1部分だけが読み込まれ。 この場合、bufをそのまま出力すればよいです。 #include <stdio.h> int main(int argc, char **argv) { char buf[BUFSIZ]; printf("Input string: "); fgets(buf, BUFSIZ, stdin); printf(buf); return 0; }

参考URL:
http://shibu.jp/cppreference/stdio_details.html
ken6791
質問者

お礼

ためになる回答ありがとうございました。 scanfに関してのことすっかり忘れていました。 おかげでしたいことができました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>sscanf(buf, "%s", moji); で、"%s" の書式指定で取り込まれるのは、スペース等のホワイト文字が区切りになります。 なので、最初の"in" までがmoji に取り込まれます 全体が必要ならbuf をそのまま使えば良いような気がします。 それぞれのワードが必要なら strtok を使って切り出すか sscanf で次に切り出す位置(in の次)を指定してやるとかしてやればイイかと思います。

関連するQ&A