我正在尝试将fileOrDir的值赋给copyFileOrDir的值。我希望copyFileOrDir等于fileOrDir的值,而不是指向同一个地址。我以为它会是copyFileOrDir = * filrOrDir但我得到错误。下面是我的代码: (fileOrDir从命令行参数中获取其值)
char *fileOrDir = (char *)malloc(25*sizeof(char));
char *copyFileOrDir = (char *)malloc(25*sizeof(char));
copyFileOrDir = *fileOrDir;
答案 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 *
。