Program nie zwraca wartości

0

Wrzucam program:

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#define VALUE 1024
using namespace std;

std::string downloadFromFile()
{
	std::string data;
	std::string data2;
	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())
	{
		while(newFile.good())
		{
			getline(newFile, data);
			cout<<("Pobrano:")<<data<<endl;
			if(!(data.empty()))
			{
				data2=data;
			}
		}
	}
	else
	{
		cout<<"Błąd! Nie można otworzyć pliku!";
	}
	 
	newFile.close();
	  
	
	
    	return data2;
}

char * uploadChar()
{
	std::string data2;
	char array[VALUE];
	int menu;

	ERROR:
	cout<<("Aby pobrać ciąg znaków z klawiatory - 1")<<endl;
	cout<<("Aby pobrać ciąg znaków z pliku - 2")<<endl;
	cin>>menu;

	if(menu==1)
	{
		cout<<"Podaj slowo lub zdanie:   (Tablica ustawiona na: "<<VALUE<<" znakow)"<<endl;
		cin>>array;
		//cin.getline(array, VALUE);
		cout<<("Slowo: ")<<array<<endl;
	}
	else if(menu==2)
	{
		
		data2=downloadFromFile();

		char array[data2.size()+1];   //konwersja string na tablice zeby moc ją zwrocić jako wskaźnik
		strcpy(array, data2.c_str());
	}
	else
	{
		cout<<"Blednea opcja"<<endl;
		cout<<"ERROR"<<endl;
		goto ERROR;
	}
	
	return array;
}

int main()
{
	cout<<(uploadChar());
	return 0;
}

Czemu program nie wykonuje polecenia "cout<<(uploadChar());". Program po wykonaniu warunków się kończy, a powinien wykonać "patrz wyżej". Nie zwraca wartości do int maina.

0

Zwracasz wskaźnik do lokalnej tablicy, jego dereferencja to UB, więc ciężko orzekać co tam się dzieje. Użyj std::string.

Btw: char array[data2.size()+1] to nie jest poprawny C++. VLA są w C.

0

Więc tak gdzie dokładnie mam wrzucić std:: i w ogóle jak się stosuję dokładnie to std::?? Nie miałem tego na wykładach i sam w moich programach tego nie stosowałem. Możesz wyjaśnić?
-Btw jak to powinno w takim razie wyglądać w C++.
Z góry dziękuję.

0
char array[VALUE];
//...
return array;

Wciąż zwracasz wskaźnik do lokalnej zmiennej. Btw: odpowiadaj w odpowiedziach, nie edytuj oryginalnego posta (to nie stack)

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