【发布时间】:2011-10-09 22:18:54
【问题描述】:
snprintf 是否总是 null 终止目标缓冲区?
换句话说,这是否足够:
char dst[10];
snprintf(dst, sizeof (dst), "blah %s", somestr);
如果 somestr 足够长,您是否必须这样做?
char dst[10];
somestr[sizeof (dst) - 1] = '\0';
snprintf(dst, sizeof (dst) - 1, "blah %s", somestr);
我对标准所说的内容以及某些流行的 libc 可能会做的非标准行为都很感兴趣。
【问题讨论】:
-
你的意思是在第二个例子中 nul 终止 somestr 或 dst 吗?
-
@chux,Martin Ba 在接受的答案中涵盖了这一点。 :)
-
@chux 我认为这很好,您的评论非常清楚地表明,如果 dest i 0 long,则什么都不会写。我把每一条评论都当作与 stackoverflowers 同伴聊天的潜在借口。 :)
-
@Prof. Falken 同意评论是好的和明确的,但答案是多余的 - 只是在我的评论中错过了。
-
stackoverflow.com/a/8712996/193892 Visual Studio 现在支持 snprintf()