如何将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;
}