回答編集履歴
3
微修正
answer
CHANGED
@@ -32,13 +32,18 @@
|
|
32
32
|
[おまけ] C++ なら sizeof(xxx) / sizeof(xxx[0]) あらため std::size 使いましょう。
|
33
33
|
```C++
|
34
34
|
#include <iostream>
|
35
|
+
#include <vector>
|
35
36
|
#include <iterator>
|
36
37
|
|
37
38
|
int main() {
|
38
39
|
char cary[123];
|
39
40
|
long lary[456];
|
41
|
+
std::vector<int> ivec(789);
|
42
|
+
int* iary;
|
40
43
|
|
41
44
|
std::cout << std::size(cary) << std::endl;
|
42
45
|
std::cout << std::size(lary) << std::endl;
|
46
|
+
std::cout << std::size(ivec) << std::endl;
|
47
|
+
//std::cout << std::size(iary) << std::endl; // ちゃんとエラーになってくれる
|
43
48
|
}
|
44
49
|
```
|
2
追記
answer
CHANGED
@@ -27,4 +27,18 @@
|
|
27
27
|
|
28
28
|
char* str なんだから、sizeof(str) = sizeof(char*) であり、大抵8(あるいは4) を返します。
|
29
29
|
char str[100] だったら sizeof(str) = sizeof(char[100]) だから 100でしょうけどね。
|
30
|
-
んなわけで、sizeof(str) / sizeof(str[0]) がまともに動くのは str が固定長配列のときに限ります。
|
30
|
+
んなわけで、sizeof(str) / sizeof(str[0]) がまともに動くのは str が固定長配列のときに限ります。
|
31
|
+
|
32
|
+
[おまけ] C++ なら sizeof(xxx) / sizeof(xxx[0]) あらため std::size 使いましょう。
|
33
|
+
```C++
|
34
|
+
#include <iostream>
|
35
|
+
#include <iterator>
|
36
|
+
|
37
|
+
int main() {
|
38
|
+
char cary[123];
|
39
|
+
long lary[456];
|
40
|
+
|
41
|
+
std::cout << std::size(cary) << std::endl;
|
42
|
+
std::cout << std::size(lary) << std::endl;
|
43
|
+
}
|
44
|
+
```
|
1
追記
answer
CHANGED
@@ -25,4 +25,6 @@
|
|
25
25
|
|
26
26
|
> int r = sizeof(str) / sizeof(str[0]);が悪いのですがこれの何が悪いのでしょうか?
|
27
27
|
|
28
|
-
char* str なんだから、sizeof(str) = sizeof(char*) であり、大抵8(あるいは4) を返します。
|
28
|
+
char* str なんだから、sizeof(str) = sizeof(char*) であり、大抵8(あるいは4) を返します。
|
29
|
+
char str[100] だったら sizeof(str) = sizeof(char[100]) だから 100でしょうけどね。
|
30
|
+
んなわけで、sizeof(str) / sizeof(str[0]) がまともに動くのは str が固定長配列のときに限ります。
|