Vol*_*ort 1 c++ string iostream char
学习C++.我只想抓取字符串中的第一个字符,然后根据这样的字符创建一个新字符串,然后将其打印出来:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
string name = "Jerry";
char firstCharacter = name.at(0);
string stringOfFirstCharacter = string(&firstCharacter);
cout << stringOfFirstCharacter;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
J
Jerry
Run Code Online (Sandbox Code Playgroud)
我真的不知道为什么它也印刷Jerry
.这是为什么?
您的代码具有未定义的行为.获取指针的构造函数的签名char
要求它是一个指向空终止字符串的指针,因为它是单个字符,所以它不在你的情况下.
我的猜测是你所拥有的实现使用了小对象优化,并且"Jerry"足够小以至于它存储在std::string
对象中而不是动态分配.在堆叠中的两个对象的布局恰好是第一firstCharacter
,然后name
.当你调用std::string(&firstCharacter)
它读取,直到它命中第一个空字符(在std::string
缓冲区内)并停在那里.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |