回答編集履歴
4
名前の修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
**追記**
|
23
23
|
> stringのc_str()が駄目なのではなく、stringstreamのstr()が返すstringは一時オブジェクトなため式の終わりまでしか寿命が無いのです。
|
24
24
|
|
25
|
-
|
25
|
+
SHOMIさん、ご指摘ありがとうございます。その通りですね。
|
26
26
|
次のように書けば大丈夫でしょう。
|
27
27
|
```C++
|
28
28
|
#include <iostream> // cout, endl
|
3
const char * から string
answer
CHANGED
@@ -17,4 +17,32 @@
|
|
17
17
|
`copy` の `+ 1` は不要です。
|
18
18
|
|
19
19
|
`copy(s, s + ss.str().size() + 1, char_array);` の代わりに、
|
20
|
-
`copy_n(s, ss.str().size() + 1, char_array);` でもかまいません。
|
20
|
+
`copy_n(s, ss.str().size() + 1, char_array);` でもかまいません。
|
21
|
+
|
22
|
+
**追記**
|
23
|
+
> stringのc_str()が駄目なのではなく、stringstreamのstr()が返すstringは一時オブジェクトなため式の終わりまでしか寿命が無いのです。
|
24
|
+
|
25
|
+
SHIOMさん、ご指摘ありがとうございます。その通りですね。
|
26
|
+
次のように書けば大丈夫でしょう。
|
27
|
+
```C++
|
28
|
+
#include <iostream> // cout, endl
|
29
|
+
#include <sstream> // stringstrem
|
30
|
+
#include <algorithm> // copy_n
|
31
|
+
|
32
|
+
int main()
|
33
|
+
{
|
34
|
+
std::stringstream ss;
|
35
|
+
ss << "hello" << "," << "world";
|
36
|
+
char char_array[256]{};
|
37
|
+
std::string s = ss.str();
|
38
|
+
std::copy_n(s.begin(), s.size(), char_array);
|
39
|
+
std::cout << char_array << std::endl;
|
40
|
+
}
|
41
|
+
```
|
42
|
+
最初、char_array が十分なサイズであれば、`ss >> char_array;` でも良いかな
|
43
|
+
と考えたのですが、ss にスペースが挿入されていた場合、`>>` では、そこで途切れ
|
44
|
+
るため、ss.str() を使うことにしました。
|
45
|
+
|
46
|
+
Beared-Ockhamさんの回答にあるように
|
47
|
+
`ss.get(char_array, sizeof char_arrya);` でよかったんですね。
|
48
|
+
勉強になります。
|
2
copy_n の追加
answer
CHANGED
@@ -14,4 +14,7 @@
|
|
14
14
|
}
|
15
15
|
```
|
16
16
|
`char char_array[256]{};` のように 0 で初期化しているのであれば、
|
17
|
-
`copy` の `+ 1` は不要です。
|
17
|
+
`copy` の `+ 1` は不要です。
|
18
|
+
|
19
|
+
`copy(s, s + ss.str().size() + 1, char_array);` の代わりに、
|
20
|
+
`copy_n(s, ss.str().size() + 1, char_array);` でもかまいません。
|
1
説明を追加
answer
CHANGED
@@ -12,4 +12,6 @@
|
|
12
12
|
std::copy(s, s + ss.str().size() + 1, char_array);
|
13
13
|
std::cout << char_array << std::endl;
|
14
14
|
}
|
15
|
-
```
|
15
|
+
```
|
16
|
+
`char char_array[256]{};` のように 0 で初期化しているのであれば、
|
17
|
+
`copy` の `+ 1` は不要です。
|