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) |
||
いい方法だと思ったんですが、 未定義動作でしたか。 ありがとうございます。 これからはその方法で書くことにします。 |