回答編集履歴

1

追記

2017/11/29 00:26

投稿

can110
can110

スコア38266

test CHANGED
@@ -1,4 +1,4 @@
1
- 一時オブジェクトだからだと考えられます。
1
+ `str2`が指している先が一時オブジェクトだからだと考えられます。
2
2
 
3
3
  `std::string("abc").c_str()`において`std::string("abc")`オブジェクトは`.c_str()`によって`const char*`を返した後は破棄されます。よってその後に`str2`で指された領域にアクセスしてはいけません。
4
4
 
@@ -42,9 +42,9 @@
42
42
 
43
43
  {
44
44
 
45
- std::string tmp = std::string("abc");
45
+ std::string tmp = std::string("abc");
46
46
 
47
- str22 = tmp.c_str();
47
+ str22 = tmp.c_str();
48
48
 
49
49
  }
50
50
 
@@ -63,3 +63,5 @@
63
63
  ```
64
64
 
65
65
  あ、[ideone](https://ideone.com/hYYKzb)では全部出力されますね。
66
+
67
+ 未定義動作なので何が起きても不思議ではありませんが。