如何将cstring参数值复制到C++;功能? 我正在努力通过函数传递C++!p>

如何将cstring参数值复制到C++;功能? 我正在努力通过函数传递C++!p>,c++,C++,假设函数声明如下: void functionname (char * myvar) { char * ptf; ptf = strtok(myvar,"="); } > cSt>Eng>MyVa/Stand >引用,如C++函数中传递的任何数组的情况,对吗? 但是如何制作myvar变量的本地副本,MyMe在函数中修改了该变量 问题是使用语句“ptf=strtok(myvar,=”;”会修改myvar > cSt>代码> MyVa/Cuff>是通过引用传递的,就像C++中传

假设函数声明如下:

void functionname (char * myvar) {

   char * ptf;
   ptf = strtok(myvar,"=");

}
<> > cSt>Eng>MyVa/Stand >引用,如C++函数中传递的任何数组的情况,对吗? 但是如何制作myvar变量的本地副本,MyMe在函数中修改了该变量

问题是使用语句“ptf=strtok(myvar,=”;”会修改myvar

<> > cSt>代码> MyVa/Cuff>是通过引用传递的,就像C++中传递的任何数组的情况一样,对吗?p> 否。在这种情况下,它是通过值传递的

但是如何制作myvar变量的本地副本,MyMe在函数中修改了该变量


你首先需要弄清楚你的意思

当您说
myvar
通过“引用”传递时,您使用的是C术语。您正在对字符数组使用引用语义,是的,但是您没有通过引用传递。在C++中,我们有引用类型,我们使用短语“通过引用”。这里有一个指针类型。您正在按值传递指针

现在,您会问“我如何制作
myvar
的本地副本?”如果我逐字解释您的问题,那么就简单到:

char* anothervar = myvar;
我已将
myvar
的值复制到另一个var。然而,它们仍然指向相同的字符数组

如果你想把字符串的内容复制到另一个数组,你就需要使用一些类似于<>代码> StrcPy < /Cord>之类的东西,并执行一些动态分配,但是这是非常糟糕的C++风格。相反,您应该在整个过程中使用

std::string
。在以下情况下,您的函数会变得简单得多:

void functionname(std::string myvar) {
  std::string anothervar = myvar;
}
(尽管没有充分的理由从
myvar
复制到
anothervar
,因为
myvar
已经是传递给它的字符串的副本)


我最近写了一篇文章,其中一节介绍了C风格的字符串以及为什么
std::string
更好。

使用数组初始化
std::string
,数组
myvar
指向第一个元素:
std::string local_string(myvar)。问题是strtok的第一个参数必须是char*@除了引用OP所说的以外,我看不到他提到的任何东西,我想我必须回到C++中的函数、指针和字符串的基本知识!谢谢你的回答@g、 维哈格:这个答案不太可能真正有用。数组new是C++的一个非常错误的特性。如果您使用此答案中的代码,您的代码很可能存在内存泄漏(在一般情况下,避免泄漏的唯一方法是在
try catch
中围绕整个内容,或者编写一个类来正确管理其析构函数及其复制/移动操作符中的资源)
std::string
是您需要的工具,而不是
new[]
@Mankarse;这个答案不太可能真正有用。数组new是C++的一个非常错误的特性:写一封信给C++标准团队,从C++中删除<代码> new <代码>,我将停止使用它。在函数functionname中,我使用strtok函数,比如需要一个char*作为第一个参数,所以使用std::string不是一个选项!我建议使用C++字符串解析实用程序,而不是<代码> Strtok> < /C>。你怎么做取决于你在做什么。您可能可以使用
std::istringstream
执行您想要的操作。切换到std::string库工具!
void functionname(std::string myvar) {
  std::string anothervar = myvar;
}