如何在C ++函数中将cstring参数值复制到本地cstring?

时间:2014-07-09 09:09:34

标签: c++

我正在努力使用C ++通过函数传递参数!

假设以下函数声明:

void functionname (char * myvar) {

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

}

cstring myvar 是通过引用传递的,就像在C ++函数中传递的任何数组一样,对吗?

但是如何制作 myvar 变量的本地副本,我在功能中修改了这个?

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

2 个答案:

答案 0 :(得分:1)

首先需要澄清你的意思。

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

现在您要问"如何制作myvar的本地副本?"如果我按字面解释你的问题,那么它就像做:

一样简单
char* anothervar = myvar;

我已将myvar的值复制到anothervar。然而,他们仍然指向同一个角色。

如果您希望将字符串的内容复制到另一个数组,则需要使用类似strcpy的内容并执行一些动态分配,但这是非常糟糕的C ++风格。相反,您应该始终使用std::string。在这样的情况下,你的功能变得更加简单:

void functionname(std::string myvar) {
  std::string anothervar = myvar;
}

(虽然从myvar复制到anothervar没有充分的理由,因为myvar已经是传递给它的字符串的副本了)

我最近在avoiding raw pointers上写了一篇文章,其中一个部分涵盖了C风格的字符串以及为什么std::string更好。

答案 1 :(得分:-1)

  

cstring myvar通过引用传递,就像在C ++函数中传递的任何数组的情况一样,对吧?

没有。在这种情况下,它通过值传递。

  

但是如何制作myvar变量的本地副本,我在函数内修改了?

void functionname (char * myvar) {

   std::string::size_type len = strlen(myvar);
   char *temp = new char[len+1];
   strcpy(temp, myvar);
   temp = strtok(temp, "=");
   //....
}