我在一个返回String的类中有一个成员函数。 如果我想让返回成为C字符串类型,我需要在声明中做什么?修改后的函数可能有也可能没有C字符串参数(可以保留当前参数)。
原始声明是:
string function(string argument);
答案 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);