char *sqlite3_mprintf(const char*,...); char *sqlite3_vmprintf(const char*, va_list); char *sqlite3_snprintf(int,char*,const char*, ...); char *sqlite3_vsnprintf(int,char*,const char*, va_list);
这些例程是标准 C 库中 "printf()" 函数系列的等效函数。这些例程理解标准库 printf() 中的大多数常用格式选项,以及一些额外的非标准格式 (%q、%Q、%w 和 %z)。有关详细信息,请参阅 内置 printf() 文档。
sqlite3_mprintf() 和 sqlite3_vmprintf() 例程将其结果写入从 sqlite3_malloc64() 获得的内存中。这两个例程返回的字符串应由 sqlite3_free() 释放。如果 sqlite3_malloc64() 无法分配足够内存来容纳结果字符串,则这两个例程都将返回 NULL 指针。
sqlite3_snprintf() 例程类似于标准 C 库中的 "snprintf()"。结果将写入作为第二个参数提供的缓冲区中,其大小由第一个参数给出。请注意,前两个参数的顺序与 snprintf() 相反。这是一个历史遗留问题,无法在不破坏向后兼容性的情况下修复。另请注意,sqlite3_snprintf() 返回其缓冲区的指针,而不是实际写入缓冲区的字符数。我们承认写入的字符数将是一个更有用的返回值,但我们现在无法在不破坏兼容性的情况下更改 sqlite3_snprintf() 的实现。
只要缓冲区大小大于零,sqlite3_snprintf() 就保证缓冲区始终以零结尾。第一个参数 "n" 是缓冲区的总大小,包括零终止符的空间。因此,可以完全写入的最长字符串将是 n-1 个字符。
sqlite3_vsnprintf() 例程是 sqlite3_snprintf() 的可变参数版本。