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