将指针值存储到单独的变量中

时间:2014-12-09 02:20:11

标签: c++ pointers char storage

我有一个char *,我想存储没有新变量的另一个指向原始变量的值。

char* newVal;

void Foo(char* val)
{
    newVal=val;
    //things happen that change what val represents
}

我希望newVal在其他代码更改之前获取val并保持其值。所以稍后在我的代码中,我可以比较这两个值。

这可能吗?还有更好的方法吗?

2 个答案:

答案 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