2017-02-16 11 views
1

私は、次の疑問を持っている:リターンsqlite3_column_text()文字列リテラルに

はSQLiteのデータベースから次のテーブルにSELECT考えてみましょう:

id | label 
1 | P1 
1 | P2 
1 | P3 
1 | P4 

私は、次のテストコードを実行します。

const unsigned char * new1; 
const unsigned char * new2; 
const unsigned char * new3; 
const unsigned char * new4; 

sqlite3_step(stmt); 
new1=sqlite3_column_text(stmt,1); 

sqlite3_step(stmt); 
new2=sqlite3_column_text(stmt,1); 

sqlite3_step(stmt); 
new3=sqlite3_column_text(stmt,1); 

sqlite3_step(stmt); 
new4=sqlite3_column_text(stmt,1); 

printf("%s\n%s\n%s\n%s\n",new1,new2,new3,new4); 
printf("%p\n%p\n%p\n%p\n",new1,new2,new3,new4); 

そして私が手:

P4 
P4 
P4 
P4 
0x1d5b7f8 
0x1d5b7f8 
0x1d5b7f8 
0x1d5b7f8 

は、私は、バッファのconst char型の値を使用せずにリテラル文字列のみでこれを印刷する方法はあり

P1 
P2 
P3 
P4 
Address1 
Address2 
Address3 
Address4 

印刷したい[N] ;, strcpyの、等...?

答えて

3

返されるポインタは、上記のように型変換が行われるまで、またはsqlite3_step()またはsqlite3_reset()またはsqlite3_finalize()が呼び出されるまで有効です。文字列とBLOBを保持するために使用されるメモリ空間は自動的に解放されます。

printfsqlite3_column_text(アドレスは依然として同じです)の後でなければ、コピーを作成する必要があります。

関連する問題