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
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:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.