質問するログイン新規登録

質問編集履歴

2

編集

2021/02/22 03:13

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -81,4 +81,25 @@
81
81
  sscanf_s(str + 5, "%1d", &b);//6番目の数字があるアドレスを指定して、1文字だけ数値として読み取る
82
82
  printf("%d\n", a + b);
83
83
  ```
84
- に関して、sscanf_s(str + 2, "%1d", &a);で指定したアドレスにある文字は2で値は50です。そして、sscanf_s(str + 5, "%1d", &b);で指定されたアドレスにある文字は5で値は53です。それなのにprintf("%d\n", a + b);での実行結果は7となりました。なぜ103ではないのでしょうか?関数sscanf_sには関数atoiのような文字2などを値2にするような作用などあるのでしょうか?
84
+ に関して、sscanf_s(str + 2, "%1d", &a);で指定したアドレスにある文字は2で値は50です。そして、sscanf_s(str + 5, "%1d", &b);で指定されたアドレスにある文字は5で値は53です。それなのにprintf("%d\n", a + b);での実行結果は7となりました。なぜ103ではないのでしょうか?関数sscanf_sには関数atoiのような文字2などを値2にするような作用などあるのでしょうか?
85
+
86
+ 編集1
87
+ ```
88
+ #include <stdio.h>
89
+ int main(void) {
90
+ char str[] = "0123456789";
91
+ printf("%d\n", str[2] + str[4]);
92
+ }
93
+ ```
94
+ なぜ、配列の書き方が char str[] = "0123456789" の場合は
95
+ str[2] + str[4]の足し算が50+52で102と10進数で出るのでしょうか?
96
+ てっきり答えは6と思っていました。
97
+ char str[] = "0123456789";と書いて、かつ配列ので文字列の数字を扱う場合はそうなるルールなのでしょうか?
98
+ ```
99
+ #include <stdio.h>
100
+ int main(void) {
101
+ char str[] = { 1,2,3,4,5 };
102
+ printf("%d\n", str[1] + str[3]);
103
+ }
104
+ ```
105
+ の char str[] = { 1,2,3,4,5 }; とした場合は6と出ます。

1

編集編集

2021/02/22 03:13

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -65,4 +65,20 @@
65
65
  仮にそうだとして、なぜ数字の文字である char str[] = "0123456789";より
66
66
  (str[2] - '0')を見た時に文字の0(0の文字コード)とstr[2](値2)と引き算が出来るのでしょうか?変だと思いました。
67
67
  どうやってatoiの関数を使わずに文字列の文字を数値にせずに(str[2] - '0') できたのか。。。
68
- どうか問題が複数ありますが一つ一つに回答して頂けるとありがたいです。そして私の間違いを正してください。
68
+ どうか問題が複数ありますが一つ一つに回答して頂けるとありがたいです。そして私の間違いを正してください。
69
+
70
+
71
+ 編集
72
+ ```
73
+ #include <stdio.h>
74
+ int main(void) {
75
+ char str[] = "0123456789";
76
+ int a, b;
77
+ sscanf_s(str + 2, "%1d", &a);//3番目の数字があるアドレスを指定して、1文字だけ数値として読み取る
78
+ //引数(目的)にint型のaを用意するが、sscanf_sはアドレスしか扱えないようなので
79
+ //&aとした。多分、strのアドレスを+2したときのアドレスに入っている数値(2)の変数aの入っている
80
+ //「アドレスに入れるためにa自体のアドレスを表す&を付けたのだろう。そのaのアドレスに数値(2)が入るように」
81
+ sscanf_s(str + 5, "%1d", &b);//6番目の数字があるアドレスを指定して、1文字だけ数値として読み取る
82
+ printf("%d\n", a + b);
83
+ ```
84
+ に関して、sscanf_s(str + 2, "%1d", &a);で指定したアドレスにある文字は2で値は50です。そして、sscanf_s(str + 5, "%1d", &b);で指定されたアドレスにある文字は5で値は53です。それなのにprintf("%d\n", a + b);での実行結果は7となりました。なぜ103ではないのでしょうか?関数sscanf_sには関数atoiのような文字2などを値2にするような作用などあるのでしょうか?