2012-03-29 5 views
1

どうすればよいですか?私は自分のバッファにsqliteのデータベースからいくつかの値を格納したいのですが、qlite3_column_text()次のプロトタイプがあります:私はときにconst unsigned char *型の値をコピーするにはどうすればよいですか?

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

を:

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

私は、次のエラーメッセージが表示されます

assignment discards qualifiers from pointer target type 

strcpy()でも試しましたが、同じエラーメッセージが表示されます。

ご協力いただきありがとうございます。前もって感謝します。

答えて

3

strdupで簡単です。

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

これはコピーをmallocするので、後でリークを起こさないようにポインタ上でfree()を呼び出す必要があることに注意してください。

もちろん、これはあなたのout配列がchar *型の値を格納できることを前提としていますが、あなたはその定義方法を示していません。

+0

それは私のためには動作しません。 sqlite3_column_text(stmt、0)); '互換性のないポインタ型' out'変数からの代入が 'char **'型を持っています。 – Jack

+0

@Jack##を#includeしましたか? –

+0

ヨアヒム・イザクソン:はい。やったよ。 – 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

しかし、 'sqlite3_column_text()'から返されたすべての文字列をコピーしたいのですが、長さはありません。次に、 'strncpy()'関数の 'n'パラメータを設定するにはどうしたらいいですか? – Jack

+0

長さを知るには、次の呼び出しを使用できます。int len = sqlite3_column_bytes(stmt、0); – Genar

1

unsigned char*を非ポインタ型に割り当てようとしています。

もっと大きな質問は、このデータとポインタの有効期間で行いたいことです。注:sqlite.org "返されるポインタは、上記のように型変換が行われるか、sqlite3_step()またはsqlite3_reset()またはsqlite3_finalize()が呼び出されるまで有効です。だから、他の人が言ったように、あなたはメモリとコピー(strdupまたはmallocstrcpy)を割り当てることができます。

関連する問題