Skinney Skrevet 17. mars 2008 Del 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 Lenke til kommentar
NevroMance Skrevet 17. mars 2008 Del 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. Lenke til kommentar
Skinney Skrevet 17. mars 2008 Forfatter Del 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... Lenke til kommentar
NevroMance Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Så du finner altså ingenting i SqlResult[13] etter det? Lenke til kommentar
Skinney Skrevet 17. mars 2008 Forfatter Del 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)... Lenke til kommentar
teflonpanne Skrevet 17. mars 2008 Del 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 Lenke til kommentar
Skinney Skrevet 17. mars 2008 Forfatter Del 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... Lenke til kommentar
teflonpanne Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Vel, argv er en char** da.. Lenke til kommentar
Roptaty Skrevet 17. mars 2008 Del 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. Lenke til kommentar
Skinney Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Brukte en cout for argc og en cout rett etter for sqlresult... sqlresult inneholder riktig informasjon i samme funksjon... rart... 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å