C/C++

Массив C++ из файла

Файл hello.txt:Test one
Код:
char msg1[256];
std::ifstream in("hello.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (getline(in, line))
{
for (int i = 0; i < line.length(); i++)
msg1[i] = line[i];
}
}
in.close(); // закрываем файл
std::cout << msg1 << std::endl;

Мне нужно, чтобы в выводе было просто Test one
но я получаю вот такой вывод:
(замена вывода с char на string не нужна)
// При условии, что в файле всего одна строка
// Вариант для символьного массива
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream hello("hello.txt");
char buffer[256] = {0};
if (hello.is_open()) {
hello.getline(buffer, size(buffer));
hello.close();
cout << buffer;
} else {
cerr << "File hello.txt not found!";
}
puts("");
system("pause > nul");
}

// Вариант для шаблонной строки
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream hello("hello.txt");
string buffer;
if (hello.is_open()) {
getline(hello, buffer);
hello.close();
cout << buffer;
} else {
cerr << "File hello.txt not found!";
}
puts("");
system("pause > nul");
}

// При условии, что строк в файле несколько
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main() {
ifstream hello("hello.txt");
vector<string> buffer;
if (hello.is_open()) {
string line;
while (getline(hello, line)) buffer.push_back(line);
for (const auto& str : buffer) cout << str << '\n';
hello.close();
} else {
cerr << "File hello.txt not found!\n";
}
system("pause > nul");
}
Александр Арефьев
Александр Арефьев
96 687
Лучший ответ
Виктор Мукомел Спасибо, очень полезно
1. кто будет добавлять байт с кодом 0 в конце массива?
2. при таком подходе в msg1 будет записана только последняя строка файла. Это то, что хотели?
3. Пользуйтесь отладчиком и пошаговым прогоном с просмотром значений переменных, уже давно не каменный век.
Виктор Мукомел Спасибо за ответ, очень помогли
1. Не знал, недавно работаю в c++, раньше работал в JavaScript с разными библиотеками.
2. Да, вполне устраивает
3. Если вы про это имеете в виду, то я пользуюсь.
Продолжая мысль Фёдора
while (getline(in, line))
{
int i; // чтобы после for видна была i
for (i = 0; i < line.length(); i++)
msg1[i] = line[i];
msg1[i] = '\0'; // чтобы после строки ничего лишнего не было
}
Виктор Мукомел Спасибо большое