将sqlite3_column_text()返回到文字字符串

时间:2017-02-16 01:16:11

标签: c string pointers sqlite literals

我有以下疑问:

从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

我想打印

P1
P2
P3
P4
Address1
Address2
Address3
Address4

有没有办法只使用字符串文字打印它而不使用缓冲区const char值[N];,strcpy等...?

1 个答案:

答案 0 :(得分:3)

  

返回的指针有效,直到如上所述发生类型转换,或直到调用sqlite3_step()或sqlite3_reset()或sqlite3_finalize()为止。用于保存字符串和BLOB的内存空间将自动释放。

除非您printf之后sqlite3_column_text(即使那时地址仍然相同),否则您需要复制。