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)));

阅读 2.9k
1 个回答

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

const char* multiline_string = "line 1\
line 2 \
line 3";
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进