C++ 按引用传递字符数组并返回修改的

C++ 按引用传递字符数组并返回修改的,c++,C++,我有下面的函数定义lke void ConvertString(std::string &str) { size_t pos = 0; while ((pos = str.find("&", pos)) != std::string::npos) { str.replace(pos, 1, "and"); pos += 3; } } 此函数的目的是查找&并将其替换为和。函数执行良好。我在一个实例中为所有的泛化字符串编写了这个,

我有下面的函数定义lke

void ConvertString(std::string &str)
{
size_t pos = 0;
    while ((pos = str.find("&", pos)) != std::string::npos) {
         str.replace(pos, 1, "and");
         pos += 3;
    }
}
此函数的目的是查找&并将其替换为和。函数执行良好。我在一个实例中为所有的泛化字符串编写了这个,我用下面的方式调用它

char mystr[80] = "ThisIsSample&String";
ConvertString((std::string)mystr);
printf(mystr);
在上面的调用中,我希望控制台应该打印带有“and”的新修改字符串。
但是一些字符串修改不起作用,函数中有错误吗?

这是因为您创建了一个临时的
std::string
对象(其初始内容是数组
mystr
的内容),并通过引用函数传递该临时对象。当调用id完成时,这个临时对象将被销毁。

您是否阅读了和的一些文档

你需要

std::string mystr = "ThisIsSample&String";
ConvertString(mystr);
printf(mystr.c_str());

显然,您希望通过引用将字符串变量(从技术上讲是an)传递给您的
ConvertString

我相信您的问题在于将char数组强制转换为字符串

ConvertString((std::string)mystr);
此行创建一个std::string类型的新变量,并通过引用传递它。您需要的是以这种方式进行转换:

std::string convertedStr = (std::string)mystr;
ConvertString(convertedStr);
printf(convertedStr.c_str());

<> P> >我不太清楚C++指针和引用语法,但它类似于

< p>你所做的是不正确的!不能使用cstyle转换将
char*
转换为
std::string
。你应该做的更像:

std::string mystr( "ThisIsSample&String" );
ConvertString(mystr);
编辑: thx的声誉。。。这段代码甚至没有编译。。。 此代码:

char mystr[80] = "ThisIsSample&String";
ConvertString((std::string)mystr);
printf(mystr);
…创建一个临时字符串对象并将其作为参数传递

由于正式参数类型是引用非->代码> const ,不应该编译,但是VisualC++支持它作为语言扩展(仅用于类类型,Irc)。 相反,你喜欢什么

string s = "Blah & blah";
ConvertString( s );
cout << s << endl;
string s=“诸如此类”;
转换字符串;

为什么不直接使用
std::string
<代码>标准::字符串mystr=“ThisIsSample&string”你使用Visual C++,对吗?因为这不应该编译。它甚至不应该编译,你可以。它将产生一个临时的
std::string
对象,该对象由
char*
-1“您不能使用cstyle转换将char*转换为std::string”@Benjamin Lindley:thx作为您的答案。但我认为这不是一个问题,如果你可以的话,这是一个关于它是否正确的问题。。。。我的一句话“你不能”并不是说你不能这样做(你可以用c++做很多讨厌的事情),它应该说:你不能,因为它不会以这种方式工作。。。thx无论如何,但c风格的演员阵容不是问题。问题是将右值传递给接受非常量左值引用的函数。C风格的演员阵容就是糟糕的风格。说
std::string convertedStr=mystr,看起来就不那么奇怪了
@juanchopanza(std::string)mystr使类型转换在我看来更显式如果你想显式,你应该使用
std::string convertedStr=std::string(mystr)。C风格的CAST语法在C++中看起来很奇怪。