scanfについて(c言語)
■ このスレッドは過去ログ倉庫に格納されています
0001ななさん
NGNGなぜ&(ポインタ?)をつけるのですか?
それと、scanfは使わない方がいいと言われたのですが、
なぜですか?
教えてください。
0002名無しさん@お腹いっぱい。
NGNG0003ななさん
NGNGレスありがとうごさいます。
入門書は持っているのですが、詳しく載ってませんでした。
自分で調べたのですが、よく分からなかったです。
よろしくお願いします。
0004やさしい人。
NGNGscanfという関数に引数を与え、その引数に値を返す場合は
アドレスを渡してやらないとだめなんです。
void func(int *a)
{
*a = 5;
}
を考えてみてね。
0005ななさん
NGNG説明ありがとうございます
関数のアドレス渡しと同じなんですね。
でも、なぜアドレスを渡さないといけないのでしょうか?
「call by reference」「call by value」の違いは
教えてもらったのですが、いまいち分かりませんでした。
それと、なぜscanfは使わない方がいいのですか?
よろしくお願いします。
0006名無しさん@お腹いっぱい。
NGNGワームが怖いからです。
0007ななさん
NGNGレスありがとうございます。
ワームとは何なのでしょうか?
初めて聞きました。
0008名無しさん@お腹いっぱい。
NGNGアンチウィルスソフトのHELP見たらわかるよ
00096
NGNGttp://www.netlaputa.ne.jp/~tackey/sotu/jirei.html
0010ななさん
NGNGアンチウィルスソフトは持ってないのですが、
ネットなどで調べてみます。
ありがとうございました。
0011名無しさん@お腹いっぱい。
NGNG>なぜ&(ポインタ?)をつけるのですか?
付けないで試してみましょう。
多分、例外吐いて落ちます。
>それと、scanfは使わない方がいいと言われたのですが、
>なぜですか?
scanf("%d"@` &a);
とでも書いて、"1.1"とか"abc"とか入力してみましょう。
暴走したり、例外吐いたりすると思います。
0012ななさん
NGNG「コンピュータウイルスの被害について」を見ました。
ワーム=ウィルスの一種ということなのでしょうか?
001311
NGNG論理的思考力があれば、なんでポインタを渡す必要があるのか位はすぐ
わかると思いますけど。
0014きびしい人。
NGNG>「call by reference」「call by value」の違いは
>教えてもらったのですが、いまいち分かりませんでした。
氏ね。
0015ななさん
NGNGはい。。
0016やさしい人。
NGNG>「call by reference」「call by value」の違いは
>教えてもらったのですが、いまいち分かりませんでした。
これをコンパイルして悩んで下さい。
ってか、悩む前に入門書に書いてあるので読んでみてね。
void func1(int a){a = 5;}
void func2(int *a){*a = 10;}
int main(void)
{
int a = 0;
printf("a=%d\n"@` a);
func1(a); /* call by value */
printf("a=%d\n"@` a);
func2(&a); /* call by reference */
printf("a=%d\n"@` a);
return 0;
}
0017名無しさん@お腹いっぱい。
NGNG0018やさしい人。
NGNG00196>17
NGNG0020名無しさん@お腹いっぱい。
NGNG0021名無しさん@お腹いっぱい。
NGNGそういう「仕様」だからです。
以上。
0022ななさん
NGNGプライバシーの侵害です。
0023名無しさん@お腹いっぱい。
NGNG偽ななさん
ちょっとおもしろかったぞ
0024名無しさん@お腹いっぱい。
NGNG値渡しはアドレスを教えないから変数の中身を変更できないわけかぁ。
初心者にはわかりやすい例えになるかな?
0025しやあせ
NGNG取得した後、strtokで文字列の切り出しをしたほうがいいと思うよ。
strtokは、かなりクセの強い関数だけど、知れば目からウロコだよ。
(すでに知ってるなら、失礼しました)
0026>25
NGNG0027名無しさん@お腹いっぱい。
NGNGstrtok()は入れ子にできない(内側実行した時点で外側が壊れる)
からなぁ。
0028名無しさん@お腹いっぱい。
NGNGstrtok()を入れ子で使いたい場合 strtok_r() という手がある。
でもソース文字列中のキー文字に'\0'を上書きしていくという
動作はstrtok()と何ら変わりはないので、親トークンの内容は
やはり切り刻まれます(w
0029名無しさん@お腹いっぱい。
NGNGなぜ"1.1"とか"abc"で落ちるの?
自分は実験してみた?
0030名無しさん@お腹いっぱい。
NGNGやってないんでしょう。
「…と思います。」って書いてあるし。
0031名無しさん@お腹いっぱい。
NGNG人に教える前に、ちゃんと勉強しましょうね。
http://ftp.linux.or.jp/JM/html/LDP_man-pages/man3/vsscanf.3.html
0032名無しさん@お腹いっぱい。
NGNG>暴走したり、
まあ、ループ内で、戻り値をチェックしない場合を想定しているのでしょう
0033名無しさん@お腹いっぱい。
NGNG単純な字句解析器を作っておいて、使いまわせばいいと思うけど。
0034名無しさん@お腹いっぱい。
NGNG> scanf("%d"@` &a);
> とでも書いて、"1.1"とか"abc"とか入力してみましょう。
これ見ただけじゃ、そんな想定してるようには思えんぞ。
0035maido
NGNGfgets(str@`sizeof(str)@`stdin); を使おう。
003611
NGNG昔、Cの勉強してたときにそう言うことをやってみたら派手に暴走してくれたん
だが‥‥‥環境の問題かな?
まあ、暴走しないんなら暴走しないでいいや。
>>34
>これ見ただけじゃ、そんな想定してるようには思えんぞ。
想定してない入力をユーザーがしないんだったら苦労はしません。
0037名無しさん@お腹いっぱい。
NGNGマジなのね。
0038名無しさん@お腹いっぱい。
NGNG入力した時点で暴走するの??
31 のリンク先見てみた感じではそんな事はなさそうだけど・・・
つーか、11 はネタ?
0040名無しさん@お腹いっぱい。
NGNG0041名無しさん@お腹いっぱい。
NGNGまあ、むかしのコンパイラはscanf@`printfがまともに動かないのが多かった。
doubleとかの場合、NaNとか入っているとprintfが死んでしまってデバッグ用の
printfのところで暴走するのは悲しかったな。
■ このスレッドは過去ログ倉庫に格納されています