c语言中使用sqlite API 的插入语句中的双引号问题?

查看:180
本文介绍了c语言中使用sqlite API 的插入语句中的双引号问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在github上下载的源码,进行make的时候围绕一句插入语句报了很多错误。
相关代码:

/*执行插入操作*/
    memset(sql , 0 , sizeof(sql));
    time(&timeNow);
86    sprintf(sql , "insert into User(userName , password , userAddr ,
87     sockfd , speak ,registerTime)\
88     values('%s','%s','%s',%d,%d,'%s');"
89     ,user.userName , user.password , inet_ntoa(user.userAddr.sin_addr)
90     ,user.sockfd , YES, asctime(gmtime(&timeNow)));

    ret = sqlite3_prepare(db , sql , strlen(sql) , &stmt , &tail);    
    if(ret != SQLITE_OK)
    {
        ret = sqlite3_step(stmt);
        sqlite3_finalize(stmt);
        sqlite3_close(db);
        return FAILED;
    }//if

报错:
register.c: In function ‘registerUser’:
register.c:86:16: warning: missing terminating " character
sprintf(sql , "insert into User(userName , password , userAddr ,

register.c:86:2: error: missing terminating " character
sprintf(sql , "insert into User(userName , password , userAddr ,

register.c:87:12: error: ‘speak’ undeclared (first use in this function)
sockfd , speak ,registerTime)\

register.c:87:12: note: each undeclared identifier is reported only once for each function it appears in
register.c:87:19: error: ‘registerTime’ undeclared (first use in this function)
sockfd , speak ,registerTime)\

register.c:87:3: warning: passing argument 2 of ‘sprintf’ makes pointer from integer without a cast [-Wint-conversion]
sockfd , speak ,registerTime)\

In file included from config.h:6:0,

             from register.c:7:

/usr/include/stdio.h:364:12: note: expected ‘const char * restrict’ but argument is of type ‘int’
extern int sprintf (char *__restrict __s,

register.c:88:3: error: expected ‘;’ before ‘values’
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:10: warning: multi-character character constant [-Wmultichar]
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:15: warning: multi-character character constant [-Wmultichar]
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:20: warning: multi-character character constant [-Wmultichar]
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:31: warning: multi-character character constant [-Wmultichar]
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:37: warning: missing terminating " character
values('%s','%s','%s',%d,%d,'%s');"

register.c:88:3: error: missing terminating " character
values('%s','%s','%s',%d,%d,'%s');"

register.c:89:3: error: expected expression before ‘,’ token
,user.userName , user.password , inet_ntoa(user.userAddr.sin_addr)

register.c:90:48: error: expected statement before ‘)’ token
,user.sockfd , YES, asctime(gmtime(&timeNow)));

解决方案

C 语言的多行字符串,每一换行前需要用 转义,即:

const char* multiline_string = "line 1\
line 2 \
line 3";

这篇关于c语言中使用sqlite API 的插入语句中的双引号问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆