为啥字符串连接在 C++ 中得到奇怪的结果? [关闭]

Posted

技术标签:

【中文标题】为啥字符串连接在 C++ 中得到奇怪的结果? [关闭]【英文标题】:why string concatenation getting strange result in c++? [closed]为什么字符串连接在 C++ 中得到奇怪的结果? [关闭] 【发布时间】:2013-08-27 00:34:40 【问题描述】:

我正在尝试在 C++ 中连接两个字符串:

"G1-2" + "-%02d.jpg"

我得到以下结果:

G1-2-1537817269.jpg

为什么不是这样的结果:"G1-2-%02d.jpg"

【问题讨论】:

你能展示一些重现问题的代码吗? 需要示例代码,因为它很难重现。 inb4 (a)s(n)printf、boost 格式、fastformat 等 @onder,我们不知道你做错了什么,因为我们主要不知道你到底在做什么。 @chris 在看到他们的代码之前不要说“不能”... 【参考方案1】:

大胆猜测!

您正在打印连接的字符串

printf(str);

其中str"G1-2-%02d.jpg"

printf("G1-2-%02d.jpg");
             ^^^^
//            but, where is corresponding integer in the following?

如您所见,字符串中有一个%02dprintf 将寻找一个整数参数。它找不到它并发生未定义的行为。在最好的情况下,它会用字符串打印出一个随机值。

如果我的猜测是真的,那么尝试以这种形式打印字符串:

printf("%s",str);

 

或者像 Chis 提到的那样使用双 %

"G1-2-%%02d.jpg"

【讨论】:

实际上,这个猜测不错。当然%%02d 会修复它。 called it 这修复了格式字符串的一般问题:printf("%s", "G1-2-%02d.jpg"); %%02d 谢谢克里斯 我希望你能解决问题,而不仅仅是症状。或者改用puts

以上是关于为啥字符串连接在 C++ 中得到奇怪的结果? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到这个奇怪的结果:[BLOB - ...]? [复制]

为啥在java中打开流后一定要关闭流??好像关不关没有不同,程序的结果都是一样的。。。

为啥我在 C++ 中使用 socket.h 通过 Internet 发送的字符串中有奇怪的数据? [关闭]

为啥当缺少连接字段之一时,HIVE 中的完全外部连接会给出奇怪的结果?

为啥减去这两次(在 1927 年)会产生奇怪的结果?

为啥我不能在“|”处分开在clojure中[重复]