- ベストアンサー
C言語の初歩的な質問
質問1----------------------------------------- #include<stdio.h> int main() { int a; char b[10]; for(int i = 0;i < 2;i++){ scanf("%d",&a); printf("整数%d\n",a); } scanf("%s",b); printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() { int *p; func(&p); printf("%d",*p); } void func(int **pp) { int n = 10; *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> この際に、例えばabと入力すると結果が > 整数-858993460 > 整数-858993460 > 文字列ab > となり整数入力を無視して進められるのはなぜでしょうか? scanfの仕様です。 > func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? 未定義の動作ですので、たまたまそうなっただけです。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
上の方だけ #1 の補足: scanf の仕様で「変換できなかったら無視して終了」です. 「ab」という入力は整数にできないので, この入力は見なかったことにして scanf は返ってきます. 当然, 入力に残ったままなので結果的に「無視された」ように見えます. このことは scanf の返り値をちゃんと確認すればわかる.
お礼
回答ありがとうございました。 仕様とのことで、そう覚えるしかないみたいですね。
- a987654
- ベストアンサー率26% (112/415)
>質問1 &a は何を指しているのでしょうか? C言語は一冊の本にaのアドレスとと書かれていませんでしょうか? すなわちコンパイルじに変数aに割りつけられたアドレスそのものです。 >質問2 >寿命がなくなるはず なんで? 必ず &n すなわち変数nのアドレスが返されます。 参考までに http://www9.plala.or.jp/sgwr-t/c/sec10-2.html
お礼
回答ありがとうございました。 読解力の不足のせいか、いまいち仰られていることが理解できませんでした。 申し訳ありません。
お礼
回答ありがとうございました。 参考になりました。