如果我声明这样的函数:
string hash (char* key)
那么我对key所做的任何更改也会在函数退出时改变它的值,对吗?
我想在函数中复制它,以便我可以安全地更改它而不更改原始值。
我试过这个,但它不起作用。
char temp = key;
怎么做?
答案 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;
我相信。