Zapis danych do pliku

0

Witam,

mam problem z zapisem do pliku a dokładniej z jej zawartością. Gdy plik zostaje zapisany taką komendą:

File << array_person[i].id_person + " ";
File << array_person[i].name + " ";
File << array_person[i].surname + " ";

wyskakuje mnóstwo tzw. "krzaków" w zapisanym pliku ... lecz gdy zapis wygląda tak:

        File << array_person[i].id_person;
	File << array_person[i].name;
	File << array_person[i].surname;

w tedy problem znika, lecz nie ma odstępów :/ Patrzałem zawartość tablicy przed zapisem i posiada dane te które oczekiwałem bez żadnych zniekształceń.

Gdy zapis do pliku wygląda tak:

       std::string text = "ID: " + array_person[i].id_person + " " + array_person[i].name + " "  + array_person[i].surname + "\n"
       file << text;

wyskakuje błąd w trakcie kompilacji, że "expression must have integral or unscoped enum type" w tedy trzeba rzutować ... odstęp !!

       std::string text = "ID: " + array_person[i].id_person + (std::string) " " + array_person[i].name + " "  + array_person[i].surname + "\n"

pierwszy raz się z czymś takim spotykam, że zapis do pliku posiada dodatkowe jakieś napisy (krzaczki) i muszę rzutować typ i to w takim miejscu :/
Proszę pomóżcie, bo nie mam pojęcia jak to naprawić

Pozdrawiam

1

Po pierwsze formatuj kod: Formatowanie treści postów na forum

Po drugie jakiego typu jest name, id_person, bo strzelam że nie są std::string tylko char[]. A wtedy + nie jest konkatenacją tylko arytmetyką wskaźnikową.

Po trzecie surname, nie surename.

0

Dziękuję za informacje o formatowaniu tekstu na tym forum oraz za błąd w angielskim ;)

jakby co to tablica jest wektor'owa typu struct.

id_person jest typu Integer a pozostałe elementy struktury są typu String.

1
file << text; 
file << text.c_str(); 

Do pliku można wysłać cstringi.

id_person jest typu Integer

Więc dla tej zmennej użyj funkcji

std::to_string() 

aby móc dodać to do łańcucha std::string.

Prosty przykład:

#include <string>
#include <fstream>
#include <iostream>

int main()
{
    std::ofstream file("test.txt");
    if (file) {
        std::string temp{};
        temp = "jestem " + std::to_string(1) + " na mecie.";
        std::cout << temp << '\n';
        file << temp.c_str();
    }
} 
3

Skoro id_person to int, a " " to const char[2], to

id_person + " "

arytmetyka wskaźnikowa (zwraca wskaźnik o id_person miejsc za wskaźnikiem wskazującym na znak spacji), a cała operacja to UB, to odwołasz się do nieswojej pamięci.
Najprostszy fix:

File << array_person[i].id_person << " ";
0

Bardzo dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1