質問編集履歴

2

編集

2021/02/22 03:13

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -165,3 +165,45 @@
165
165
  ```
166
166
 
167
167
  に関して、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にするような作用などあるのでしょうか?
168
+
169
+
170
+
171
+ 編集1
172
+
173
+ ```
174
+
175
+ #include <stdio.h>
176
+
177
+ int main(void) {
178
+
179
+ char str[] = "0123456789";
180
+
181
+ printf("%d\n", str[2] + str[4]);
182
+
183
+ }
184
+
185
+ ```
186
+
187
+ なぜ、配列の書き方が char str[] = "0123456789" の場合は
188
+
189
+ str[2] + str[4]の足し算が50+52で102と10進数で出るのでしょうか?
190
+
191
+ てっきり答えは6と思っていました。
192
+
193
+ char str[] = "0123456789";と書いて、かつ配列ので文字列の数字を扱う場合はそうなるルールなのでしょうか?
194
+
195
+ ```
196
+
197
+ #include <stdio.h>
198
+
199
+ int main(void) {
200
+
201
+ char str[] = { 1,2,3,4,5 };
202
+
203
+ printf("%d\n", str[1] + str[3]);
204
+
205
+ }
206
+
207
+ ```
208
+
209
+ の char str[] = { 1,2,3,4,5 }; とした場合は6と出ます。

1

編集編集

2021/02/22 03:13

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -133,3 +133,35 @@
133
133
  どうやってatoiの関数を使わずに文字列の文字を数値にせずに(str[2] - '0') できたのか。。。
134
134
 
135
135
  どうか問題が複数ありますが一つ一つに回答して頂けるとありがたいです。そして私の間違いを正してください。
136
+
137
+
138
+
139
+
140
+
141
+ 編集
142
+
143
+ ```
144
+
145
+ #include <stdio.h>
146
+
147
+ int main(void) {
148
+
149
+ char str[] = "0123456789";
150
+
151
+ int a, b;
152
+
153
+ sscanf_s(str + 2, "%1d", &a);//3番目の数字があるアドレスを指定して、1文字だけ数値として読み取る
154
+
155
+ //引数(目的)にint型のaを用意するが、sscanf_sはアドレスしか扱えないようなので
156
+
157
+ //&aとした。多分、strのアドレスを+2したときのアドレスに入っている数値(2)の変数aの入っている
158
+
159
+ //「アドレスに入れるためにa自体のアドレスを表す&を付けたのだろう。そのaのアドレスに数値(2)が入るように」
160
+
161
+ sscanf_s(str + 5, "%1d", &b);//6番目の数字があるアドレスを指定して、1文字だけ数値として読み取る
162
+
163
+ printf("%d\n", a + b);
164
+
165
+ ```
166
+
167
+ に関して、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にするような作用などあるのでしょうか?