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

回答編集履歴

3

前提が間違っていた。

2021/02/15 22:18

投稿

raccy
raccy

スコア21807

answer CHANGED
@@ -1,3 +1,11 @@
1
+ 質問者より
2
+
3
+ > 言語はcです。今後はタグにcのみにします。strの型はcharです。
4
+
5
+ とのコメントを受けました。**下記の回答は前提が間違っていますので、無視してください。**
6
+
7
+ ---
8
+
1
9
  実際に同じか試してみました。
2
10
 
3
11
  質問文に詳しいコードがなかったため、前提として、下記であると推測しました。

2

誤字の修正

2021/02/15 22:18

投稿

raccy
raccy

スコア21807

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  質問文に詳しいコードがなかったため、前提として、下記であると推測しました。
4
4
 
5
5
  1. 質問にはCとC++の二つの異なる言語のタグがついています。C++は(一部を除いた)Cの拡張であり、Cについて聞きたいのであれば、わざわざC++のタグを付けると言うことはない判断しました。よって、Cの話ではなくC++に限定した話である前提とします。
6
- 2. 質問は`str`がどのような型であるかの情報がありません。strと言う名前からstring、つまり、文字列だと推測されます。C++で文字列を扱うのであれば`std::string`がもっとも妥当とおもわれるため、`std::string`であると判断しました。`str`は`std::string`であることを前提とします。
6
+ 2. 質問は`str`がどのような型であるかの情報がありません。strと言う名前からstring、つまり、文字列だと推測されます。C++で文字列を扱うのであれば`std::string`がもっとも妥当とおもわれるため、`std::string`であると判断しました。`str`は`std::string`であることを前提とします。
7
7
 
8
8
  質問での推測が正しいか確認するために、下記のコードを用意しました。
9
9
 

1

`str + i`が抜けていた。

2021/02/15 21:55

投稿

raccy
raccy

スコア21807

answer CHANGED
@@ -30,6 +30,7 @@
30
30
  std::string str = "abcdef";
31
31
  std::size_t i = 1;
32
32
  std::cout << *(str + i) << std::endl;
33
+ std::cout << (str + i) << std::endl;
33
34
  std::cout << &*(str + i) << std::endl;
34
35
  return 0;
35
36
  }
@@ -38,7 +39,7 @@
38
39
  それぞれの実行結果は下記にあるWandboxを確認してください。
39
40
 
40
41
  * [上のコードの実行結果](https://wandbox.org/permlink/P4N6rq9V0dYTdQb1)
41
- * [下のコードの実行結果](https://wandbox.org/permlink/OIRfSvUkEoU0JSNq)
42
+ * [下のコードの実行結果](https://wandbox.org/permlink/Kl7O4ICoQ8iPtiU0)
42
43
 
43
44
  見ればわかりますが、下のコードはコンパイルエラーになります。つまり、最初の前提で話を進めた場合、「同じであるという前にコンパイルエラーになる」が結論となります。
44
45