Zmienna string się resetuje!

0

Wklejam tutaj program"

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

using namespace std;
int main()
{
	string data;
	ifstream newFile;
	cout<<("Jeśli chcesz wczytać dane z pliku stworz plik o nazwie: dane.txt i wpisz do niego tekst.")<<endl;
	cin.get();
	newFile.open("dane.txt");
	if( newFile.is_open()==1)
	{
		while(newFile.good())
		{
			getline(newFile, data);
			cout<<("Pobrano:")<<data<<endl;
		}
	}
	else
	{
		cout<<"Błąd! Nie można otworzyć pliku!";
	}
	 
	newFile.close();
	  
	char tab[data.size()+1];
	strcpy(tab, data.c_str());
	cout<<tab;
	cin.get();
	return 0;
}

Po wykonaniu pętli while zmienna data się resetuje. Przekopiowanie stringa na tablicę nie chce się wykonać,tak jakby string data był pusty.
Jak temu zaradzić? Czemu tak się dzieje?

0

Lepiej sprawdź czy twój plik dane.txt nie jest pusty ;)

0

Jeśli ostatnia linia w pliku jest pusta, to data będzie puste po wyjściu z pętli.

Z innych rzeczy:

if( newFile.is_open()==1)

bezsensowna konstrukcja, wystarczy if (newFile.is_open()).

char tab[data.size()+1];

To nie jest poprawne w C++ (wiem wiem, Twój kompilator to łyka), nie można deklarować tablicy o rozmiarze nieznanym podczas kompilacji.
Poza tym po co kopiować do tablicy?

0

Chcę zwrócić tablicę przez wskaźnik z funkcji.

Przy obecnym kodzie to byś zwrócił wskaźnik do lokalnej tablicy, która przestanie istnieć po wyjściu z funkcji. A dlaczego nie zrobisz po prostu

string readData()
{
    string data;
    ifstream input;
    ...
    return data;
}

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