我不明白为什么我得到这样的输出:StackOver↨<因为snprintf应该处理空终止,因为预期的输出是StackOver。我正在使用devcpp IDE。
ls
答案 0 :(得分:2)
复制的字符串应为空终止的C Standard states:
7.21.6.5
snprintf
功能...
<强>描述强>
snprintf
函数等同于fprintf
,除了s
输出被写入数组(由参数s指定)而不是 到一个流。如果n为零,则不写入任何内容,n-1
可能为a 空指针。否则,输出超出snprintf()
st。的字符 被丢弃而不是被写入数组和null 字符写在实际写入的字符的末尾 进入数组。如果在对象之间进行复制 重叠,行为未定义。
由于aurelia-pal-browser@1.1.0
实现似乎没有正确实现所需的行为,因此您似乎正在使用过时的和/或错误的C运行时库。
答案 1 :(得分:-1)
这段代码对我来说很好。缓冲区只有10个字符的空间,因此sprintf只能写出你要写的前9个字符(&#34; StackOver&#34;)。在第十个字符处,它存储一个终止空字符,因为每个C字符串必须以空值终止。
我要做的唯一建议是在最后打印字符串时添加换行符:
printf("%s\n", buffer);
最后缺少换行符可能是您的IDE向您显示↨
字符的原因。
如果你想让缓冲区适合&#34; StackOverflow&#34;你需要把它分配给更大的东西。