string words[5];
for (int i = 0; i < 5; ++i) {
words[i] = "word" + i;
}
for (int i = 0; i < 5; ++i) {
cout<<words[i]<<endl;
}
我预期结果为:
word1
.
.
word5
但它在控制台中打印如下:
word
ord
rd
d
有人可以告诉我这是为什么吗?我确信在java中它会按预期打印。
C++ 不是 Java。
In C++, "word" + i
是指针运算,不是字符串连接。请注意,类型字符串字面量 "word"
is const char[5]
(包括空字符'\0'
),然后衰减到const char*
这里。因此对于"word" + 0
你会得到一个类型的指针const char*
指向第一个字符(即w
), for "word" + 1
你会得到指向第二个字符的指针(即o
), 等等。
你可以使用operator+ with std::string
, and std::to_string(C++11 起) 此处。
words[i] = "word" + std::to_string(i);
顺便说一句:如果你愿意的话word1
~ word5
,你应该使用std::to_string(i + 1)
代替std::to_string(i)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)