Nei*_*val 3 c format-specifiers
这是我在C中的代码片段:
char *str = NULL;
int len = -1;
// Get length
len = snprintf(NULL, 0, "[%d]", 2);
// Allocate str
str = (char *)malloc(len + 1);
// Assign str
snprintf(str, len, "[%d]", 2);
assert(len == 3);
// Display str
puts(str);
Run Code Online (Sandbox Code Playgroud)
我希望这应该显示出来[2].而len这里是3.
但只运行此代码 [2
为什么会这样?
MBy*_*ByD 11
缓冲区的长度是len+1,但你只传递len给snprintf,试试这个:
snprintf(str, len + 1, "[%d]", 2);
Run Code Online (Sandbox Code Playgroud)
如果生成的字符串长度超过n-1个字符,则剩余的字符将被丢弃并且不会被存储,但会计算该函数返回的值.
在内容之后自动附加终止空字符.