当前位置: 技术问答>linux和unix
char*和char**运用的问题
来源: 互联网 发布时间:2016-04-18
本文导语: 大家好! 向各位请教一个基础问题,常年没用C写代码,实在生疏了。 我的代码里调用了sqlite3数据库,定义错误信息,我用的变量类型是char** errmsg,但是输出我是用的*errmsg,结果就出问题了,代码可编译...
大家好!
向各位请教一个基础问题,常年没用C写代码,实在生疏了。
我的代码里调用了sqlite3数据库,定义错误信息,我用的变量类型是char** errmsg,但是输出我是用的*errmsg,结果就出问题了,代码可编译,但是我的窗体启动不了。
代码如下,请老师们指教:
请高人详细讲解一下,char*和char**的应用,感谢!
向各位请教一个基础问题,常年没用C写代码,实在生疏了。
我的代码里调用了sqlite3数据库,定义错误信息,我用的变量类型是char** errmsg,但是输出我是用的*errmsg,结果就出问题了,代码可编译,但是我的窗体启动不了。
代码如下,请老师们指教:
sqlite3 *db = NULL;
int result;
char **errmsg = NULL; //这里我定义了指针变量
result = sqlite3_open("./userdata/data", &db );
result = sqlite3_exec( db, "select * from plans", LoadMyInfo, NULL, errmsg);//这里详细说明一下
//若前面定义成char *errmsg
//这里就会出错,说无法转换
//error: cannot convert ‘char*’ to ‘char**’ for argument ‘5’ to ‘int
// sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)’
if(result != SQLITE_OK){
printf( "错误码:%d,错误原因:%sn", result, errmsg );//然后是这里,会有一个warning提示。
//若我写成*errmsg,则GTK+窗口启动不了。
//warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘char**’
}
请高人详细讲解一下,char*和char**的应用,感谢!
|
简单来说,char * 是指向char的指针,char** 是指向char的指针的指针。
这样写比较容易理解
char *errmsg = NULL;
result = sqlite3_exec( db, "select * from plans", LoadMyInfo, NULL, &errmsg);
if(result != SQLITE_OK){
printf( "错误码:%d,错误原因:%sn", result, errmsg );//