2012-03-29 14 views
1

Wie mache ich das? Ich möchte in meinem Puffer einen Wert von SQLite-Datenbank speichern, aber die qlite3_column_text() hat den folgenden Prototyp:Wie kopiere ich einen Wert mit const unsigned char * type?

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); 

dann, wenn ich tun:

out[size] = sqlite3_column_text(stmt, 0); 

ich folgende Fehlermeldung:

Ich versuchte auch strcpy(), aber ich bekomme die gleiche Fehlermeldung.

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

Antwort

3

Es ist einfach, mit strdup;

out[size] = strdup((const char*)sqlite3_column_text(stmt, 0)); 

Beachten Sie, dass dies die Kopie malloc wird, so dass Sie später nicht auf den Zeiger free() müssen rufen ein Leck zu bekommen.

Dies setzt natürlich voraus, dass Ihr Array out Werte vom Typ char * speichern kann, Sie zeigen nicht, wie es definiert ist.

+0

Es funktioniert nicht für mich. wenn ich 'out [size] = strdup ((const char *) sqlite3_column_text (stmt, 0)); 'I hole' Zuweisung von inkompatiblen Zeigertyp' 'out' Variable habe' char ** 'type. – Jack

+0

@Jack Hast du '#include ' '? –

+0

Joachim Isaksson: Ja. Ich habe es gemacht. – Jack

1
// Should work? 
#define BUF_SIZE 512 
char buffer[BUF_SIZE]; 

strncpy(buffer, (const char*)sqlite3_column_text(stmt, 0), BUF_SIZE); 
buffer[BUF_size-1] = '\0'; 
+0

Aber ich möchte alle von 'sqlite3_column_text()' zurückgegebene Zeichenfolge kopieren und ich habe keine Länge davon. Wie setze ich dann den 'n' Parameter der' strncpy() 'Funktion? – Jack

+0

Um die Länge zu kennen, können Sie den folgenden Aufruf verwenden: int len ​​= sqlite3_column_bytes (stmt, 0); – Genar

1

Sie versuchen, einen unsigned char* einem Nicht-Zeigertyp zuzuordnen. Sie sollten so etwas wie tun:

Eine größere Frage ist, was Sie mit diesen Daten und der Lebensdauer des Zeigers machen möchten. Hinweis von sqlite.org "Die zurückgegebenen Zeiger sind gültig, bis eine Typumwandlung auftritt, wie oben beschrieben, oder bis sqlite3_step() oder sqlite3_reset() oder sqlite3_finalize() aufgerufen wird." So, wie andere gesagt haben, möchten Sie möglicherweise Speicher zuweisen und kopieren (strdup oder malloc und strcpy).