请考虑以下代码:
char *myContent = "content";
int size = snprintf(NULL, 0, "INSERT INTO myTable (col1) VALUES('%s')",myContent);
char *query = malloc(size+2);
snprintf(query, size, "INSERT INTO myTable (col1) VALUES('%s')",myContent);
现在我遇到了最后一个括号被截断的问题:
(gdb) print query
$2 = 0x616080 "INSERT INTO myTable (col1) VALUES('content'"
这不是一个有效的SQL语句,所以你知道最后一个括号丢失的原因是什么吗?
答案 0 :(得分:3)
snprintf
返回:
打印的字符数(不包括用于结束输出到字符串的尾随'\ 0')
但是尺寸参数是:
和vsnprintf()最多写入大小字节(包括尾随空字节('\ 0'))
所以你应该:
char *query = malloc(size+1);
snprintf(query, size+1, "INSERT INTO myTable (col1) VALUES('%s')",myContent);
答案 1 :(得分:0)
snprintf返回结果字符串的大小,不包括NULL终止符。我认为你需要将大小+ 1传递给第二个snprintf。
答案 2 :(得分:0)
其他人说了什么。但由于我的内容没有改变,所以简单地说:
是安全的 sprintf(query, "INSERT INTO myTable (col1) VALUES('%s')",myContent);