Skinney Skrevet 17. mars 2008 Skrevet 17. mars 2008 (endret) Skjønner ikke helt hvorfor ikke dette fungerer, så håper på litt hjelp her... har definert en strengtabell "std::stringstream SqlResult[1000];" som jeg prøver å lagre resultatet fra en Sql database i. static int ReadFromDB(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ SqlResult[i].str(argv[i]); // printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } Her er argc hvor mye informasjon som finnes, og argv er verdien. resten er ikke så viktig... Nå, hvis argc = 1, så vil informasjonen til argv[1] lagres i SqlResult[1] ikke sant? Men problemet er at hvis jeg senere skal hente resultatet fra SqlResult[1] så finnes det ingenting der... Men i SqlResult[0] finner jeg den siste verdien som ble lagret i SqlResult... Så hva er det jeg gjør galt her? :S Endret 17. mars 2008 av Skinney
NevroMance Skrevet 17. mars 2008 Skrevet 17. mars 2008 Hvis argc = 1 så vil aldri verdien argv[1] finnes siden argc sier at det er 1 verdi i arrayet, og det er argv[0]. Dessuten vil for løkka di aldri gå til 1 hvis argc = 1, siden i skal være ekte mindre enn argc = 1, altså kun 0.
Skinney Skrevet 17. mars 2008 Forfatter Skrevet 17. mars 2008 bare brukte 1 som eksempel, og ser ut som jeg ikke tenkte meg helt om når jeg skrev eksempelet. Når jeg tester dette så tester jeg med 14 verdier (argc = 14). Så det kan ikke være problemet...
NevroMance Skrevet 17. mars 2008 Skrevet 17. mars 2008 Så du finner altså ingenting i SqlResult[13] etter det?
Skinney Skrevet 17. mars 2008 Forfatter Skrevet 17. mars 2008 absolutt ingenting... Det er rart. Hvis jeg ber programmet å skrive innholdet av SqlResult[x] rett etter at verdien er lagret så fungerer det fint. Men hvis en annen funksjon prøver å lese innholdet så finner den kun den sist lagrede verdien i SqlResult[0]... (er en global stringstream)...
teflonpanne Skrevet 17. mars 2008 Skrevet 17. mars 2008 (endret) Hm, er det en spesiell grunn for at du bruker std::stringstream og ikke std::string? Stringstreams brukes for å konvertere enkelt mellom f.eks tall og stringer. F.eks stringstream ss; ss << "lala " << 3; string s = ss.str(); // nå er er s = "lala 3" Men dette funker hvertfall her: #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss[3]; for (int i = 0; i < 3; i++) { stringstream s; s << "test" << i; ss[i].str(s.str()); } for(int i = 0; i < 3; i++) { cout << ss[i].str() << endl; } } $ g++ t.cpp && ./a.out test0 test1 test2 $ Endret 17. mars 2008 av teflonpanne
Skinney Skrevet 17. mars 2008 Forfatter Skrevet 17. mars 2008 Grunnen til å bruke stringstream er fordi jeg ikke vet om det er int eller char som kommer ut av sql databasen... regner med at det har noe å si...
Roptaty Skrevet 17. mars 2008 Skrevet 17. mars 2008 Er du sikker på at argc og argv inneholder riktig informasjon? Har du trippelsjekket dette med f.eks debugger. Å bruke en debugger er bedre enn å bruke diverse std::couts i histen og pisten.
Skinney Skrevet 18. mars 2008 Forfatter Skrevet 18. mars 2008 Brukte en cout for argc og en cout rett etter for sqlresult... sqlresult inneholder riktig informasjon i samme funksjon... rart...
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å