回答編集履歴

4

名前の修正

2020/08/13 05:55

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- SHIOMさん、ご指摘ありがとうございます。その通りですね。
49
+ SHOMIさん、ご指摘ありがとうございます。その通りですね。
50
50
 
51
51
  次のように書けば大丈夫でしょう。
52
52
 

3

const char * から string

2020/08/13 05:55

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -37,3 +37,59 @@
37
37
  `copy(s, s + ss.str().size() + 1, char_array);` の代わりに、
38
38
 
39
39
  `copy_n(s, ss.str().size() + 1, char_array);` でもかまいません。
40
+
41
+
42
+
43
+ **追記**
44
+
45
+ > stringのc_str()が駄目なのではなく、stringstreamのstr()が返すstringは一時オブジェクトなため式の終わりまでしか寿命が無いのです。
46
+
47
+
48
+
49
+ SHIOMさん、ご指摘ありがとうございます。その通りですね。
50
+
51
+ 次のように書けば大丈夫でしょう。
52
+
53
+ ```C++
54
+
55
+ #include <iostream> // cout, endl
56
+
57
+ #include <sstream> // stringstrem
58
+
59
+ #include <algorithm> // copy_n
60
+
61
+
62
+
63
+ int main()
64
+
65
+ {
66
+
67
+ std::stringstream ss;
68
+
69
+ ss << "hello" << "," << "world";
70
+
71
+ char char_array[256]{};
72
+
73
+ std::string s = ss.str();
74
+
75
+ std::copy_n(s.begin(), s.size(), char_array);
76
+
77
+ std::cout << char_array << std::endl;
78
+
79
+ }
80
+
81
+ ```
82
+
83
+ 最初、char_array が十分なサイズであれば、`ss >> char_array;` でも良いかな
84
+
85
+ と考えたのですが、ss にスペースが挿入されていた場合、`>>` では、そこで途切れ
86
+
87
+ るため、ss.str() を使うことにしました。
88
+
89
+
90
+
91
+ Beared-Ockhamさんの回答にあるように
92
+
93
+ `ss.get(char_array, sizeof char_arrya);` でよかったんですね。
94
+
95
+ 勉強になります。

2

copy_n の追加

2020/08/13 05:27

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -31,3 +31,9 @@
31
31
  `char char_array[256]{};` のように 0 で初期化しているのであれば、
32
32
 
33
33
  `copy` の `+ 1` は不要です。
34
+
35
+
36
+
37
+ `copy(s, s + ss.str().size() + 1, char_array);` の代わりに、
38
+
39
+ `copy_n(s, ss.str().size() + 1, char_array);` でもかまいません。

1

説明を追加

2020/08/13 03:30

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -27,3 +27,7 @@
27
27
  }
28
28
 
29
29
  ```
30
+
31
+ `char char_array[256]{};` のように 0 で初期化しているのであれば、
32
+
33
+ `copy` の `+ 1` は不要です。