如何将存储在另一个指针指向的地址中的值分配给指向指针的地址?

How to assign to the address of a pointed pointer the value stored at the address pointed by another pointer?

int main() 接受 1 个命令行参数:in_filename = argv[1](命令行参数示例:inputfile.txt)。 *in_filename*out_filename 都是 const char *。我想在 out_filename 地址写入存储在 *in_filename 指向的地址中的值。例如,如果 *in_filname 是 0x7fffffffe930 "inputfile.txt" 在 *out_filename 指向的地址(不同于 0x7fffffffe930)将被存储 "inputfile.txt"。

int main(int argc, char **argv){

const char *in_filename, *out_filename;
in_filename  = argv[1];
out_filename = argv[1];
return 0
 }

如果我使用上面的代码 out_filename 将具有与 in_filename 相同的地址,但我希望他具有不同的地址和相同的值 (inputfile.txt)存储在 in_filename.

指向的地址

如果我用

int main(int argc, char **argv){

const char *in_filename, *out_filename;
in_filename  = argv[1];
strcpy(out_filename, in_filename);
return 0
 }

我在调试器中收到错误消息:out_filename 的地址为 0x40000,但访问它时出错,程序停止。 in_filename 有一个地址和存储在其中的正确值。这个任务的正确代码是什么?

您要查询的代码是:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {

    const char *in_filename;
    char *out_filename;
    in_filename  = argv[1];
    out_filename = malloc(strlen(in_filename)+1);

    strcpy(out_filename, in_filename);

    printf("%s\n", in_filename);
    printf("%s\n", out_filename);

    return 0;
}

函数 strcpychar * 作为目标,而不是 const char * 参见 strcpy

我看你是彻底糊涂了。

此处,argv[1] 是一个指针,指向由操作系统分配的内存区域,它会在其中复制传递给您的程序的第一个参数。当您执行 in_filename = argv[1]; 时,您使 in_filename 指向同一内存区域。

现在,out_filename 也是一个指针,但它最初并不指向任何地方。如果你做 in_filename = argv[1]; 那么这两个指针都指向前面提到的由 OS 分配的内存区域,所以你的副本将没有意义。但这当然是合法的,您可以 strcpy(out_filename, in_filename).

如果你想out_filename指向一个不同的有效内存区域,那么你需要为它分配内存,或者在堆栈上:

char out_filename[strlen(argv[1]) + 1];

或在堆上:

out_filename = malloc(strlen(argv[1]) + 1);

然后使用 strcpy(out_filename, in_filename)!

进行复制