PDA

View Full Version : [C++] Problemi lanciando il .exe compilato


graffio83
18-01-2012, 18:51
Ecco il problema ho un programma in c++ visual studio.

ad un certo punto ho

sprintf(MiaStringa,"%s",listbox1->selectedItem->ToString());
printf("%s\n",MiaStringa);

la lista è piena di scritte tipo

scritta 1
scritta 2
...

se compilo e lancio premendo su un item della lista ho printato l'item stesso
(Es premo su scritta 2 e in console compre scritta 2)

ora chiudo visual studio e lancio il .exe

se premo su "scritta 2" mi compaiono simboli strani

se compilo in debug invece funziona sia in compilazione che se lacio l'exe.

qualcuno ha sugerimenti???

grazie mille :)

graffio83
19-01-2012, 08:58
Altre info

printf("%s\n",Form1::TrackList->SelectedItem->ToString());
NON FUNZIONA, Stampa Caratteri strani

Console::WriteLine(Form1::TrackList->SelectedItem->ToString());
Funziona

darksax
19-01-2012, 15:07
Ad occhio (e memoria) ToString() ti ritorna un'oggetto String.
La WriteLine() funziona xche' ha l'overload per quel tipo.
La printf() con il %s tratta i char* quindi "simpippa"(tm).


Il fatto che in debug con VS ti funziona e' la solita maledizione :( .
Mamma M$ maschera una serie di "sviste" (puntatori/casting/etc.) facendoti girare il tuo sorgente come se niente fosse e quando vai in produzione e' un casino...

graffio83
19-01-2012, 15:25
Alla fine ho risolto utilizzando uno String::Copy() al posto dell'sprintf
fatto sta che l'sprintf funziona ovunque tranne li...

misteri incredibili

anche perchè quando lancio la release da VS tutto funge, è quando a VS chiuso lancio l'exe che si blocca tutto...

bha

vendettaaaaa
19-01-2012, 16:03
Alla fine ho risolto utilizzando uno String::Copy() al posto dell'sprintf
fatto sta che l'sprintf funziona ovunque tranne li...

misteri incredibili

anche perchè quando lancio la release da VS tutto funge, è quando a VS chiuso lancio l'exe che si blocca tutto...

bha
A proposito di misteri incredibili...o forse solo di stupidità (mia), perchè, nel caso b sia il numero minore questo funziona:
#include <iostream>

using namespace std;

void main(void)
{
int a,b,c;

cout << "Exercize 2: find the smallest of three integer numbers\n" << endl;
cout << "Input 3 different integer numbers:" << endl;
cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c;

if(a < b)
if(a < c)
{
cout << "The smallest of the 3 is a = " << a << endl;
return;
}

if(b < c)
{
cout << "The smallest of the 3 is b = " << b << endl;
return;
}

cout << "The smallest of the 3 is c = " << c << endl;
}
mentre questo, aggiungendo un else, NON funziona:
#include <iostream>

using namespace std;

void main(void)
{
int a,b,c;

cout << "Exercize 2: find the smallest of three integer numbers\n" << endl;
cout << "Input 3 different integer numbers:" << endl;
cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c;

if(a < b)
if(a < c)
{
cout << "The smallest of the 3 is a = " << a << endl;
return;
}

else if(b < c)
{
cout << "The smallest of the 3 is b = " << b << endl;
return;
}

cout << "The smallest of the 3 is c = " << c << endl;
} (dice che c è il più piccolo, cioè salta il blocco dell'else)???
Mi sento stupidissimo.

edit: 5 secondi dopo che ho scritto ho realizzato: non avendo messo le parentesi al primo if(a < b), l'else pensava di essere quello relativo al secondo if(a < c)...eppure mi sembrava che VS2010 l'avesse evidenziato insieme al primo if :hmm:

graffio83
19-01-2012, 16:19
Non avendo messo le parentesi l'else fa riferimento al secondo if e non al primo.
Aggiungi tutte le {} e vedi che andrà

vendettaaaaa
19-01-2012, 16:22
Non avendo messo le parentesi l'else fa riferimento al secondo if e non al primo.
Aggiungi tutte le {} e vedi che andrà
Scusa se t'ho fatto perdere tempo, l'avevo già notato :doh: