【发布时间】:2012-08-22 01:39:36
【问题描述】:
我正在使用 snprintf 将字符串连接到 char 数组:
char buf[20] = "";
snprintf(buf, sizeof buf, "%s%s", buf, "foo");
printf("%s\n", buf);
snprintf(buf, sizeof buf, "%s%s", buf, " bar");
printf("%s\n", buf);
问题是buf 的第二个连接不是添加"bar",而是用它替换"foo"。输出如下:
foo
bar
第一个%s 应保留buf(在本例中为"foo")。第二个%s 应该附加"bar" 到它。对吧?
我做错了什么?
【问题讨论】:
-
对于 C++,你应该硬着头皮使用
std::string。当然,这对您问题的 C 部分没有帮助。 -
@Scooter:不要到处从使用 C 库函数的问题中删除
c++标记。 C 与 C++ 编译器处理相同代码的方式通常存在细微差别。 -
@BenVoigt 我不能直接更改任何标签,所以这意味着至少有两个人不同意你。
-
@Scooter:我不在乎有多少人同意你。在互联网上不难找到三个错的人。 The expert consensus is that the tag should match the compiler being used.
-
@Jermin:不要那样做。现在我将删除
c++标签,根据您的评论,它毕竟没有编译为 C++。