声明成员变量时的字符串与C字符串

时间:2013-12-01 18:13:54

标签: c++ string cstring

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

原始声明是:

string function(string argument);

4 个答案:

答案 0 :(得分:4)

C风格的字符串char数组以\0关闭,所以:

char* function(string argument);

你也可以考虑通过c_str()方法返回一个字符串并从该值中检索一个C字符串。

答案 1 :(得分:3)

C字符串只是字符串第一个字符的美化指针,字符串结尾为0字节。所以,你返回一个char指针:

char *function(string argument); // returns pointer to modifiable char buffer

困难的部分是,字符串必须仍然存在于某处。例如,您不能返回局部变量的地址,因为它在函数返回时消失。低级方式是,返回一个从堆中分配的new char[length+1]指针,并在完成调用后将其调用到delete[]。但这容易造成内存泄漏以及手动内存管理的所有其他有趣的事情。

更容易返回某种包装器对象,例如智能指针。但是,最简单且最不容易出错的是使用std::string作为包装器对象,并使用其c_str()方法访问C字符串......


有一种情况是返回C字符串可能有意义:你从一系列文字返回一个字符串文字,就像这个粗略的例子:

return (result>0 ? "positive" : "not positive");

在这种情况下,返回指向const char的指针,因为文字是只读的,并且不要将它与诸如在堆中返回生成的字符串之类的东西混合(因为谁将删除它?)。

const char *function(string argument); //returns pointer to string literal

答案 2 :(得分:0)

我会按以下方式声明该功能

char* function( const std::string &s );

答案 3 :(得分:0)

cstring标头提供了处理C风格字符串的函数 - 以空字符结尾的字符数组。

#include <cstring>
string function(std::string argument);