如何在C ++中实现返回char指针的子字符串? (指向第一个字母的指针)
说char* substr(char* c, int pos, int lenght
)
答案 0 :(得分:4)
我使用std::string类的方法。
编辑:
说像char * substr(char * c,int pos,int lenght)
这不是一个可以很好地实现的功能。要创建子字符串,需要内存:
与原始字符串相同的内存:您是否要覆盖原始字符串?原始字符串是否可写?
新内存:调用者是否会在从substr
函数接收的指针上调用delete []运算符(如果没有,会有内存泄漏)?< / p>
全局内存:你可以在全局内存中保留一个固定长度的缓冲区,但这是各种各样的问题(可能不够长,当别人调用你的substr
时会被覆盖)。 / p>
正确的做法是返回一个std::string
实例,这是string::substr
方法所做的,如Graphics Noob's answer所示,因为std::string
实例(与char*
实例不同)将管理自己内存的生命周期;如果您想要char*
实例中的std::string
实例,则可以使用c_str()
方法获取该实例。
答案 1 :(得分:2)
答案 2 :(得分:1)
str.substr(int,int).c_str()
将子字符串作为const char*
返回,但要小心使用它,包含字符串的内存在语句末尾将无效,因此如果strcpy()
可能需要用std::string str2 = str.substr(int,int);
const char* cstr = str2.c_str();
包围它你想存储结果。或者更好,但只需将其分为两行:
const
你需要做一个strcpy()来安全地摆脱int
。
{{1}}指的是你想要得到的子字符串的参数。