Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明成员变量时的字符串与C字符串_C++_String_Cstring - Fatal编程技术网

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

我在一个类中有一个返回字符串的成员函数。 如果要使返回为C字符串类型,我需要在声明中执行什么操作?修改后的函数可能有也可能没有C字符串参数(可以保留当前参数)

原来的声明是:

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);