微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

snprintf截断最后一个符号

如何解决snprintf截断最后一个符号

| 考虑以下代码
char *myContent = \"content\";
int size = snprintf(NULL,\"INSERT INTO myTable (col1) VALUES(\'%s\')\",myContent);
char *query = malloc(size+2);
snprintf(query,size,myContent);
现在我有一个问题,最后一个括号被截断了:
(gdb) print query
$2 = 0x616080 \"INSERT INTO myTable (col1) VALUES(\'content\'\"
这不是有效的sql语句,所以您是否知道缺少最后一个括号的原因是什么?     

解决方法

        
snprintf
返回:   打印的字符数(不包括用于结束输出到字符串的结尾\'\\ 0 \') 但是size参数是:   和vsnprintf()最多写入大小字节(包括结尾的空字节(\'\\ 0 \')) 因此,您应该:
char *query = malloc(size+1);
snprintf(query,size+1,\"INSERT INTO myTable (col1) VALUES(\'%s\')\",myContent);
    ,        snprintf返回结果字符串的大小,不包括NULL终止符。我认为您需要将size + 1传递给第二个snprintf。     ,        其他人怎么说。但是由于myContent并未更改,因此可以简单地说:
 sprintf(query,myContent);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。