回答編集履歴

5

打ち消し線追加

2020/08/18 05:53

投稿

退会済みユーザー
test CHANGED
@@ -74,39 +74,45 @@
74
74
 
75
75
  ### 追記
76
76
 
77
- writeを用いた
78
77
 
78
+
79
- 一括書き込みを行うコード
79
+ 下記解説誤った解説の疑いあり(yumetodoさんより)
80
80
 
81
81
 
82
82
 
83
- まず私の環境では元コードコンパイルして
83
+ ~~write用いた~~
84
84
 
85
- するとファイルは生成されましたが
85
+ ~~一括書き込みをうコード~~
86
-
87
- abcdefとしか記載されていませんでした。
88
86
 
89
87
 
90
88
 
91
- 理由恐らく
89
+ ~~まず私環境で元コードをコンパイルして~~
92
90
 
93
- 元コードでwriteメソッドの第一引数で
91
+ ~~実行するとファイル生成されましたが~~
94
92
 
95
- vstr[0]を指定しており、
96
-
97
- そのvstr[0]はpstrが格納されています。
98
-
99
- もっと詳しく説明しますとそのpstrの文字aの番地です。
100
-
101
- そしてそのアドレスから6番目のアドレスに終端文字が入っているので
102
-
103
- 出力されるファイルにはabcdefしか記載されということ
93
+ ~~abcdefしか記載されませんした~~
104
94
 
105
95
 
106
96
 
107
- こで下記ようにメモリ上に一列に終端文字を改行コードに置き換えた
97
+ ~~その理由は恐らく~~
108
98
 
99
+ ~~元コードではwriteメソッドの第一引数で~~
100
+
101
+ ~~vstr[0]を指定しており、~~
102
+
103
+ ~~そのvstr[0]はpstrが格納されています。~~
104
+
105
+ ~~もっと詳しく説明しますとそのpstrの文字aの番地です。~~
106
+
107
+ ~~そしてそのアドレスから6番目のアドレスに終端文字が入っているので~~
108
+
109
+ ~~出力されるファイルにはabcdefしか記載されないということです。~~
110
+
111
+
112
+
113
+ ~~そこで下記のようにメモリ上に一列に終端文字を改行コードに置き換えた~~
114
+
109
- メモリを作ることができればwriteメソッドで一括書き換えできるかと思います。
115
+ ~~メモリを作ることができればwriteメソッドで一括書き換えできるかと思います。~~
110
116
 
111
117
 
112
118
 

4

詳しい解説追加

2020/08/18 05:53

投稿

退会済みユーザー
test CHANGED
@@ -80,6 +80,36 @@
80
80
 
81
81
 
82
82
 
83
+ まず私の環境では元コードをコンパイルして
84
+
85
+ 実行するとファイルは生成されましたが
86
+
87
+ abcdefとしか記載されていませんでした。
88
+
89
+
90
+
91
+ その理由は恐らく
92
+
93
+ 元コードではwriteメソッドの第一引数で
94
+
95
+ vstr[0]を指定しており、
96
+
97
+ そのvstr[0]はpstrが格納されています。
98
+
99
+ もっと詳しく説明しますとそのpstrの文字aの番地です。
100
+
101
+ そしてそのアドレスから6番目のアドレスに終端文字が入っているので
102
+
103
+ 出力されるファイルにはabcdefしか記載されないということです。
104
+
105
+
106
+
107
+ そこで下記のようにメモリ上に一列に終端文字を改行コードに置き換えた
108
+
109
+ メモリを作ることができればwriteメソッドで一括書き換えできるかと思います。
110
+
111
+
112
+
83
113
  ```c++
84
114
 
85
115
  #include <iostream>

3

追記コードが短くなるよう修正

2020/08/18 05:21

投稿

退会済みユーザー
test CHANGED
@@ -124,13 +124,7 @@
124
124
 
125
125
 
126
126
 
127
- for (const auto& i : vstr)
127
+ for (const auto& i : vstr)std::cout << i ;
128
-
129
- {
130
-
131
- std::cout << i ;
132
-
133
- }
134
128
 
135
129
 
136
130
 

2

writeを用いたコードの追記

2020/08/18 04:32

投稿

退会済みユーザー
test CHANGED
@@ -69,3 +69,77 @@
69
69
 
70
70
 
71
71
  ```
72
+
73
+
74
+
75
+ ### 追記
76
+
77
+ writeを用いた
78
+
79
+ 一括書き込みを行うコード
80
+
81
+
82
+
83
+ ```c++
84
+
85
+ #include <iostream>
86
+
87
+ #include <fstream>
88
+
89
+ #include <vector>
90
+
91
+ #include <cstring>
92
+
93
+
94
+
95
+ int main()
96
+
97
+ {
98
+
99
+ const char* pstr = "abcdef";
100
+
101
+
102
+
103
+ // もともとpstrの番地を格納したvectorでしたが
104
+
105
+ // a,b,c,d,e,f,\n,a,b,c,d,e,f,\n...と並べたメモリを作成するためchar型を格納するvectorに変更
106
+
107
+ std::vector<char> vstr;
108
+
109
+ std::fstream outfile;
110
+
111
+
112
+
113
+ for (int i = 0; 6 > i; ++i){
114
+
115
+ for(int j=0; j<std::strlen(pstr); ++j){
116
+
117
+ vstr.push_back(pstr[j]);
118
+
119
+ }
120
+
121
+ vstr.push_back('\n');
122
+
123
+ }
124
+
125
+
126
+
127
+ for (const auto& i : vstr)
128
+
129
+ {
130
+
131
+ std::cout << i ;
132
+
133
+ }
134
+
135
+
136
+
137
+ outfile.open("./out.txt", std::ios::out);
138
+
139
+ outfile.write(&vstr[0], vstr.size());//一括書き込み
140
+
141
+ }
142
+
143
+
144
+
145
+ ```

1

誤記

2020/08/18 04:24

投稿

退会済みユーザー
test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  outfile.open("./out.txt", std::ios::out);
60
60
 
61
- for(const auto i:vstr)outfile << i << std::endl;
61
+ for(const auto& i:vstr)outfile << i << std::endl;
62
62
 
63
63
  outfile.close();
64
64