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屋!