Skinney Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Heisann! Skal lage en streng for å kommunisere med en SQL database. Koden kompileres helt fint, men når den kjøres kræsjer programmet :S char* SqlString = new char[501]; {...} SqlString = "INSERT INTO Music(track, title, artist, album, genre, year, path) values("; //strcat(SqlString, TF.tag()->track()); strcat(SqlString, ", "); strcat(SqlString, TF.tag()->title().toCString()); strcat(SqlString, ", "); strcat(SqlString, TF.tag()->artist().toCString()); strcat(SqlString, ", "); strcat(SqlString, TF.tag()->album().toCString()); strcat(SqlString, ", "); strcat(SqlString, TF.tag()->genre().toCString()); strcat(SqlString, ", "); //strcat(SqlString, TF.tag()->year().toCString()); strcat(SqlString, ", "); strcat(SqlString, F.char_str()); strcat(SqlString, "))");*/ wxMessageBox(wxString::FromUTF8(SqlString), _("Welcome to...")); Jeg har sjekket, og hvis jeg kommenterer ut strcat setningene så er det ingen problemer... Lenke til kommentar
Skinney Skrevet 16. mars 2008 Forfatter Del Skrevet 16. mars 2008 Hvor kræsjer det? På første strcat setning... Kanskje verdt å nevne at dette blir kjørt i en loop... Lenke til kommentar
GeirGrusom Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Først og fremst kan du allokere stringen din på stack, så slipper du en eventuel minnelekasje; pluss at stack-minne også kan være raskere en heap. altså char SqlString[501]; SqlString[0] = 0; Aprikos det, kan det hende det kræsjer fordi du ikke setter første byte i arrayet til 0. Lenke til kommentar
Skinney Skrevet 16. mars 2008 Forfatter Del Skrevet 16. mars 2008 Først og fremst kan du allokere stringen din på stack, så slipper du en eventuel minnelekasje; pluss at stack-minne også kan være raskere en heap.altså char SqlString[501]; SqlString[0] = 0; Aprikos det, kan det hende det kræsjer fordi du ikke setter første byte i arrayet til 0. Løste dessverre ikke saken. Jeg fant heldigvis en annen måte å gjøre det på. Men nå har jeg støtt på et nytt problem... sukk.. Denne gangen gjelder det å gjøre om en int til const char*. SqlString.Append(wxString::FromUTF8((const char *)(TF.tag()->year()))); Hva som skjer her er at jeg prøver å legge til TF.tag()->year() til SqlString (som er av type wxString). Problemet er at wxString ikke støtter uint(unsigned int) som da er TF.tag()->year(), men krever at det skal være en const char*. Så jeg har prøvd å gjøre dette ved å legge til en (const char *) som dere ser, men å kjøre denne koden resulterer i kræsj igjen. Noen annen måte å gjøre dette på? Lenke til kommentar
GeirGrusom Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Du må konvertere int til string, med f.eks. _itoa funksjonen, eller enda bedre, _itow. itow konverterer til unicode. Lenke til kommentar
Skinney Skrevet 16. mars 2008 Forfatter Del Skrevet 16. mars 2008 Hei igjen. Fant ut at jeg likesågodt bare kunne bruke en stringstream, og det funker som forventet Takk for hjelpen Lenke til kommentar
Roptaty Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Heisann! char* SqlString = new char[501]; {...} SqlString = "INSERT INTO Music(track, title, artist, album, genre, year, path) values("; //strcat(SqlString, TF.tag()->track()); Jeg har sjekket, og hvis jeg kommenterer ut strcat setningene så er det ingen problemer... Hei! Problemet her er at du tildeler variabelen SqlString et konstant minneområde (ved SqlString = "INSERT...". En char* variabel fungerer IKKE som en std::string. Hvis SqlString etter dynamisk allokering peker til et minneområde vil den peke til et annet område etter "INSERT INTO". Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå