掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++のscanf()の文字入力で、入力済みの変数が変更されてしまう。 (ID:57487)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まきじさん、RiSKさん、ありがとうございます。 ご指摘通り、%cにすることで、きちんとVC++でも動きました。.NET2003ドキュメントで、%sはnull文字を追加するというのは、確かにそれとなく見ていたのですが、まさか、1byte違いの直ぐお隣さんだったとは。。 またscanfの指定子は只でさえ色々あって、頭が混乱していました。 そもそも、 #include <stdio.h> int main() { char ch; int i , j; printf("演算します。式を入力してください>"); scanf("%d %[+-*/] %d" , &i , &ch , &j); printf("i=%d operator=\'%c\' j=%d\n",i,ch,j); switch(ch) { case '+': printf("答えは %d です" , i + j); break; case '-': printf("答えは %d です" , i - j); break; case '*': printf("答えは %d です" , i * j); break; case '/': printf("答えは %d です" , i / j); break; default: printf("入力に誤りがあります"); } return 0; } が、bccだと上手くいくのに、VC++ではNG。 そこから迷走が始まってしまいました。%[+-*/]も、なにかバッファオーバーフローっぽいです。これはあるサイトのコードを少し改変したもので、管理人さんの断り書きにはきちんと、bccのみでの検証と書かれていました。%[A-Z]なんてのもあるからそれを考えて、%[-+*/]と+,-の順序を逆にしてみると、%1sとしたときと、まったく同じ挙動になりました。 大分、スッキリしました。ありがとうございます。 (この書き込みでまだ詰めの甘いところ、興味深い指摘などがありましたら、突っ込んでいただけると嬉しいですm(^_^)m
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.