我有一个char *,我想存储没有新变量的另一个指向原始变量的值。
char* newVal;
void Foo(char* val)
{
newVal=val;
//things happen that change what val represents
}
我希望newVal在其他代码更改之前获取val并保持其值。所以稍后在我的代码中,我可以比较这两个值。
这可能吗?还有更好的方法吗?
答案 0 :(得分:0)
newVal=val;
这会使newVal指向与val相同的内存位置,即对val的任何更改也会反映在newVal中。
在您的情况下,您似乎希望newVal成为val的副本。
newVal = new char[strlen(val)+1]; //You can also use malloc.
strcpy(newVal, val); //newVal and val are separate objects now.
答案 1 :(得分:0)
首先,评估一下你想要的东西并说出来 请记住,计划不是领土,地理代码不是房子,指针和它指向的对象可能是完全不同的东西。
现在,完成了这个并且(我猜)实际上想要复制指向的对象,问题是它是什么?
如果我们不知道它是什么,我们就无法复制一个对象,所以让我们假设它是一个以0结尾的字符串,也就是c-string。
在这种情况下,我们可以使用Posix strdup()
创建一个副本 - 函数:
char* copy = strdup(val);
如果您没有strdup
,则实现如下:
char* strdup(const char* p) {
size_t n = strlen(p) + 1;
char* r = malloc(n);
if(r) memcpy(r, p, n);
return r;
}
之后不要忘记free
。