C++ &引用;sqlite3博士“绑定文本”;及;sqlite3先生“U列”文本“;神秘的

C++ &引用;sqlite3博士“绑定文本”;及;sqlite3先生“U列”文本“;神秘的,c++,sqlite,C++,Sqlite,为什么sqlite3\u column\u text返回无符号字符*, 但是sqlite3\u bind\u text采用const char*。 当您要在数据库中存储字节数组时,可能会对此感兴趣。如果要存储某些字节数组(不是以null结尾的字符串),则应使用而不是sqlite3\u bind\u text(需要文本,即以null结尾的字符串) 如果您知道您正在处理以null结尾的字符串,请使用sqlite3\u bind\u text,可能还需要转换为(const char*);在C中,强制

为什么
sqlite3\u column\u text
返回
无符号字符*

但是
sqlite3\u bind\u text
采用
const char*


当您要在数据库中存储字节数组时,可能会对此感兴趣。

如果要存储某些字节数组(不是以null结尾的字符串),则应使用而不是
sqlite3\u bind\u text
(需要文本,即以null结尾的字符串)

如果您知道您正在处理以null结尾的字符串,请使用
sqlite3\u bind\u text
,可能还需要转换为
(const char*)
;在C中,强制转换在运行时不更改任何数据(除了与浮点或更大或更小的整数类型之间的数字转换),它们只是更改编译时类型(至少对于常见系统上的指针类型)


(在上个世纪,一些奇怪的机器(例如Cray1)有不同的指针类型大小,例如
char*
指针的位数与
int*
指针的位数不同)。

如果我们要存储存储在无符号char*中的UTF8字符串,该怎么办?转换不会改变数据吗?如果不是,这就是答案@Amir将指针强制转换为另一个指针类型只会更改其取消引用的方式,地址保持不变。不过要小心,编译器不会检查您所做的事情(在大多数情况下,它就是不能检查)。问题是为什么输入和输出类型不同。这个答案如何解决这个问题?