snprintf()内部调用memset()还是类似的东西?

时间:2018-06-20 08:05:29

标签: c arrays printf memset

出于安全考虑,我意识到使用snprintf()代替sprintf()。但是,我总是对memset()使用的缓冲区执行snprintf()。我看到一些使用不带memset()的函数的代码。并且,它按预期工作。我的意思是缓冲区上没有覆盖。让我举例说明,

char str[100];
snprintf(str, sizeof(str), "stackoverflow %zu", sizeof(str));
fprintf(stderr, "%s\n", str);

snprintf(str, sizeof(str), "soner");
fprintf(stderr, "%s\n", str);

直到现在,我还认为代码可以打印soneroverflow 100,这就是为什么我使用memset()的原因。不过,它会打印soner。如何在后台进行?顺便说一句,sprintf()也适用相同的内容。

1 个答案:

答案 0 :(得分:3)

来自snprintf

  

在内容写入后会自动添加一个终止的空字符。

如果要检查缓冲区,您将找到

{ 's', 'o', 'n', 'e', 'r', '\0', 'v', 'e', 'r', /* ... */ }