C++:I用不同的位置调用字符串 substr 两次,转换为常量字符 *,它们返回相同的,为什么
C++:I call a string substr twice with different position, convert to const char *, they return the same,why?
示例:
const char * aaa(string str){
string tmp = str.substr(0,5);
return tmp.c_str();
}
const char * bbb(string str){
string tmp = str.substr(6);
return tmp.c_str();
}
string str = "Hello World";
const char * ss = aaa(str);
const char * tt = bbb(str);
结果是ss="World",tt="World",但我的期望是ss="Hello",tt="World",我不知道为什么。我希望 aaa() 和 bbb() 返回"const char*"。
使用
return tmp.c_str();
是不对的。它导致上游未定义的行为,main
.
应将aaa
更改为:
std::string aaa(string str){
return str.substr(0,5);
}
您应该以类似的方式更改bbb
。
虽然这些修复将是好的,但期望str
会改变是没有根据的。
这两个函数都按值接受其参数。他们都无法从
main
修改原始对象。这两个函数都不会更改输入参数。当您调用
str.substr(0, 5);
时,它们会构建一个新的string
。
相关文章:
- 多字符常量警告
- const_cast<字符 *>(字符* 常量) 不是左值?
- 常量字符数组模板与字符常量* 函数重载
- 如何检查字符常量是否符合ASCII
- 从字符串数组转换为字符* 常量
- 字符常量或字符串常量
- 字符常量数组为空,即使已为其赋值 [C++]
- 如何创建 ' 字符常量
- 如何编写完全可移植的 4 字节字符常量的编译时初始化
- 我得到以下错误:[警告]多字符字符常量
- C++错误:警告:多字符字符常量/a用于用法
- 字符常量和函数名称的 sizeof() 背后的逻辑
- 如何在 C 中将多字符常量转换为整数
- C++ wifstream:不兼容的字符常量*,wchar_t康斯特*类型
- 不允许从"常量无符号字符*常量*"到"常量字符*常量*"static_cast
- 修改字符 *常量字符串
- 为什么字符常量/文字不能为空?
- C++字符 * 常量与字符 *,为什么有时一个有时另一个
- 警告多字符字符常量 [-Wmultichar]
- 开关语句多字符常量