C++ 声明成员变量时的字符串与C字符串
我在一个类中有一个返回字符串的成员函数。 如果要使返回为C字符串类型,我需要在声明中执行什么操作?修改后的函数可能有也可能没有C字符串参数(可以保留当前参数) 原来的声明是:C++ 声明成员变量时的字符串与C字符串,c++,string,cstring,C++,String,Cstring,我在一个类中有一个返回字符串的成员函数。 如果要使返回为C字符串类型,我需要在声明中执行什么操作?修改后的函数可能有也可能没有C字符串参数(可以保留当前参数) 原来的声明是: string function(string argument); C样式字符串是用\0闭合的char数组,因此: char* function(string argument); 您还可以考虑Tor返回字符串并通过 CyString()/代码>方法从该值中检索C字符串。 < P>我将以以下方式声明函数 char* f
string function(string argument);
C样式字符串是用
\0
闭合的char
数组,因此:
char* function(string argument);
您还可以考虑Tor返回字符串并通过<代码> CyString()/代码>方法从该值中检索C字符串。
< P>我将以以下方式声明函数char* function( const std::string &s );
C字符串只是指向字符串的第一个字符的美化指针,0字节表示字符串的结尾。因此,返回一个char指针:
char *function(string argument); // returns pointer to modifiable char buffer
最难的是,绳子肯定还在某处。例如,您不能返回局部变量的地址,因为当函数返回时,它将消失。低级方法是,返回一个从堆中分配的带有newchar[length+1]
的指针,并期望调用者在处理完它后delete[]
它。但这很容易导致内存泄漏和所有其他有趣的手动内存管理
更简单的方法是返回某种包装器对象,例如智能指针。然而,到目前为止,最简单也是最不容易出错的方法是使用std::string
作为包装对象,并使用其C_str()
方法访问C字符串
有一种情况下,返回C字符串可能是有意义的:您从一组文本中返回一个字符串文本,如下面这个粗糙的示例:
返回(结果>0?“正”:“非正”)代码>
在这种情况下,返回指向const char的指针,因为文本是只读的,不要将其与在堆中返回生成的字符串之类的内容混合使用(因为谁会删除它?)
cstring头提供用于处理C样式字符串(以null结尾的字符数组)的函数
#include <cstring>
string function(std::string argument);
#包括
字符串函数(std::string参数);
Google“C字符串处理”,有很多有用的结果。保持函数不变,在需要访问C样式字符串的地方使用C_str()
成员函数。将其作为引用传递-可能是常量。保存在“复制”操作符上
#include <cstring>
string function(std::string argument);