回答編集履歴
4
名前の修正
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
SH
|
49
|
+
SHOMIさん、ご指摘ありがとうございます。その通りですね。
|
50
50
|
|
51
51
|
次のように書けば大丈夫でしょう。
|
52
52
|
|
3
const char * から string
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 の追加
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
説明を追加
test
CHANGED
@@ -27,3 +27,7 @@
|
|
27
27
|
}
|
28
28
|
|
29
29
|
```
|
30
|
+
|
31
|
+
`char char_array[256]{};` のように 0 で初期化しているのであれば、
|
32
|
+
|
33
|
+
`copy` の `+ 1` は不要です。
|