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

回答編集履歴

3

微修正

2021/04/18 08:18

投稿

episteme
episteme

スコア16612

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

追記

2021/04/18 08:18

投稿

episteme
episteme

スコア16612

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

追記

2021/04/18 08:14

投稿

episteme
episteme

スコア16612

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 が固定長配列のときに限ります。