为指针指定另一个指针的值

时间:2014-03-09 20:16:55

标签: c pointers

我正在尝试将fileOrDir的值赋给copyFileOrDir的值。我希望copyFileOrDir等于fileOrDir的值,而不是指向同一个地址。我以为它会是copyFileOrDir = * filrOrDir但我得到错误。下面是我的代码: (fileOrDir从命令行参数中获取其值)

char *fileOrDir = (char *)malloc(25*sizeof(char));
char *copyFileOrDir = (char *)malloc(25*sizeof(char));
copyFileOrDir = *fileOrDir;

3 个答案:

答案 0 :(得分:5)

指针指向一块内存。如果将一个指针设置为等于另一个指针,则最终指向同一块内存。如果您实际分配了两个不同的块,则永远不应该将一个指针设置为另一个 - 您将无法释放内存。

您很可能打算执行memcpy,它允许您将一个内存块的内容复制到另一个内存块:

memcpy(void* destination, const void* source, size_t numberofbytes);

答案 1 :(得分:1)

  

我正在尝试将fileOrDir的值赋给值   copyFileOrDir。

您不会将变量的值分配给另一个变量的值。这是不对的。您为变量赋值。将变量视为内存位置。也不要强制转换malloc的结果。这没用,可能会导致错误。现在让我们来看看你的代码片段。

// don't cast the result of malloc

char *fileOrDir = malloc(25 * sizeof(char)); 
char *copyFileOrDir = malloc(25 * sizeof(char));

以下陈述

copyFileOrDir = *fileOrDir;

尝试将类型为fileOrDir的{​​{1}}指向的对象分配给类型为char的{​​{1}} - 另一种类型。这是一个错误。此外,通过分配copyFileOrDir,您将丢失由char *分配的内存导致内存泄漏的句柄。如果要将copyFileOrDir指向的缓冲区复制到malloc指向的缓冲区,则应使用fileOrDir

copyFileOrDir

答案 2 :(得分:0)

我认为你对指针和价值观感到困惑。你说你希望“copyFileOrDir的值等于fileOrDir的值。”但是fileOrDir的值只是指向动态分配的内存块的指针,该内存恰好是25个字节(假设sizeof(char)是一个字节)。

你真正想要的是copyFileOrDir指向一个内存块,它是fileOrDir值指向的内存的精确副本。您可以使用memcpy

执行此操作

char *copyFileOrDir = malloc(25*sizeof(char)); memcpy(copyFileOrDir, fileOrDir, 25*sizeof(char));

另外,我应该指出copyFileOrDir = *fileOrDir;毫无意义。在这种情况下,您将取消引用fileOrDir(即获取fileOrDir指向的地址的值,即char),并将其分配给copyOfFileOrDir,即char * {1}}。换句话说,您要将char分配给char *