Program nie działa w pełni po kompilacji release

0

Witam

Mam dziwny problem i nie mogę znaleźć rozwiązania.

Po napisaniu programu i uruchomieniu kompilatora w trybie Debug program działa prawidłowo.

Gdy kompiluje w Release to brakuje kilku Label.

Fragment kodu.

godzina= Form2->line.c_str();
czas = Time();    
Label2->Caption=Form2->line.c_str();    
Label3->Caption=czas;    
Label4->Caption=Form2->line.c_str(); 

Pozdrawiam.

3

Wartość z c_str jest ważna i dostępna TYLKO w chwili wywołania! Jeśli chcesz z niej tak korzystać to musisz ja skopiować.

0

A czy Możesz to objaśnić na jakimś przykładzie.

0

Ależ proszę:

string test = "ala ma kota";
cout<<test.c_str(); //poprawne bo w chwili wywołania metody masz gwarancje że adres z c_str jest poprawny

const char* test2 = test.c_str();
//jakieśtam operacje
cout<<test2; //nie poprawne bo w międzyczasie string test mógł zostać przeniesiony w inne miejsce i adres w test2 nie musi być poprawny

string test3 = test.c_str(); //albo po prostu test3=test
//jakieśtam operacje
cout<<test3; //poprawne bo skopiowaliśmy zawartość stringa

char* buffer = new char[test.length()+1]
strcpy(buffer,test.c_str());
//jakieśtam operacje
cout<<buffer; //poprawne bo skopiowaliśmy zawartość stringa
0

Kurcze nie działa mi to.

Mam kod który pobiera godzinę z pliku.

     std::wfstream infile;
         infile.open("Liczba.txt", ios::in );  //Z pliku pobieram godzinę np 21:02:00
	 infile >> line.c_str();
	 line2=line.c_str();;
         infile.close();
	czas = "12:12:12";
	Label1->Caption=czas;
	Label2->Caption=line2;
 

Gdy kompiluje w Debug to działa wszystko ok.
Gdy Kompiluje w Release to na formie nie widzę w ogóle

Label2->Caption=line2; 

Gdzie popełniam błąd?

0

Której części mojego pierwszego posta nie zrozumiałeś? NIE WOLNO ci modyfikować tego co zwraca c_str(). NIE WOLNO i już. A ty jak gdyby nigdy nic coś do niego wpisujesz. Gdzie tu sens i gdzie logika?

infile.open("Liczba.txt", ios::in );  //Z pliku pobieram godzinę np 21:02:00
infile >> line;
infile.close();
char* buffer = new char[line.length()+1]
strcpy(buffer,test.c_str());
Label2->Caption=buffer;

i gdzieś na koniec musisz zrobić delete[] na tym buforze!

0

Po co Ci zmienne line i line2? Nie wystarczy tylko line? Zrob cos takiego

infile.open("Liczba.txt", ios::in ); 
getline(infile, line);
infile.close();

A pozniej zamiast:

 
Label2->Caption=line.c_str();

sprobuj:

 
Label2->Caption=line;

Jezeli nie da sie przypisac do "Caption" zmiennej typu string, to sprobuj:

 
Label2->Caption=AnsiString(line);

lub

 
Label2->Caption=AnsiString(line.c_str());

lub

 
Label2->Caption=String(line);

lub

 
Label2->Caption=String(line.c_str());

Tak troche zgaduje :)

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