質問編集履歴
2
編集
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
編集編集
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にするような作用などあるのでしょうか?
|