如何在C ++中复制char而不是引用

时间:2010-05-24 21:58:31

标签: c++ function reference g++ char

如果我声明这样的函数:

string hash (char* key)

那么我对key所做的任何更改也会在函数退出时改变它的值,对吗?

我想在函数中复制它,以便我可以安全地更改它而不更改原始值。

我试过这个,但它不起作用。

char temp = key;

怎么做?

6 个答案:

答案 0 :(得分:9)

最明显的可能是将参数更改为字符串:

std::string hash(std::string key) { 
    // ...
}

在典型的情况下,您希望它是std::string const &,但在这种情况下,您想要原始的可修改副本,因此您可以按值传递字符串。由于字符串可以(隐式)从char *构造,因此您仍然可以将指针传递给char而没有问题(并且编译器将在需要时自动构造字符串)。

答案 1 :(得分:2)

std::string tmp(key);

tmp将初始化为密钥副本。确保密钥以空值终止,否则这将以泪水结束。有关std::string ctors的概述,请参阅this

将该函数声明为std::string hash(const char* key);,这将使键明显变化并保护您不会意外更改它。

答案 2 :(得分:0)

只需使用

string hash(char key)

这会将char推送到堆栈上,只会在函数范围内使用它的本地版本。

哦,再读一遍也许你想复制一个字符串而不是一个字符串,在这种情况下你可以使用strdup但是不要忘记在函数结束时释放它的内存。最后,如果您计划将其转换为string,也可以使用std::string类的复制构造函数。

答案 3 :(得分:0)

我认为将char数组复制到std::string的语法有点不对。要制作字符串的副本,请执行以下操作:

std::string copy(key);

在几秒钟内,std::string = (char*)something应该有效,因为字符串定义了赋值运算符。

答案 4 :(得分:0)

如果要将参数保留为char指针,请使用strcpy

定义:

char *strcpy(char *destination, const char *source);

您还可以使用strdup

答案 5 :(得分:-1)

char temp = *key;我相信。