C言語関係掲示板

過去ログ

No.1094 fgets+sscanfで入力された改行が消えるのはなぜ

[戻る] [ホームページ]
No.14387

sscanfについて
投稿者---TAKA(2004/06/02 14:33:22)


sscanfについて質問です。

fgets(str, sizeof(str),stdin);
sscanf(str,"%s",str);

上記のようにするとfgetsで入力された改行が消えるのはなぜなのでしょうか。
これは僕が使用しているコンパイラ、OS等の関係なのか、
そういう仕組みなのか教えてください。



No.14391

Re:sscanfについて
投稿者---あかま(2004/06/02 15:28:56)


>そういう仕組みなのか教えてください。
そういう仕組みです。
"%s"指定子は空白類を読み込みません。

それよりも第1引数と、第3引数が同じアドレスなのは問題がありそうな。。。



No.14417

ありがとうございます
投稿者---TAKA(2004/06/03 15:40:32)


そういう仕様なんですね。
安心しました。

>それよりも第1引数と、第3引数が同じアドレスなのは問題がありそうな。。。
そして、不安になりました(^^;
改行文字を消すのによく使うんですけど、
偶然動いてるだけだったら・・・><



No.14420

Re:ありがとうございます
投稿者---あかま(2004/06/03 15:54:05)


http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_sscanf.2c_.swscanf.asp
>重なり合う文字列間でコピーした場合の動作は未定義です。
と書かれていましたので、止めた方がいいでしょう。

i = strlen(str);
if(str[i-1] == '\n') str[i-1] = '\0';

か

if((p = strchr(str,'\n') != NULL) *p = '\0';

と書いておけばOKでしょう。



No.14443

Re:ありがとうございます
投稿者---TAKA(2004/06/04 12:38:12)


いい方法だと思ったんですが、
未定義動作でしたか。

ありがとうございます。
これからはその方法で書くことにします。