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

C 如何将另一个指针指向的地址中存储的值分配给指针的地址?,c,pointers,memory,dereference,C,Pointers,Memory,Dereference,int main()*in_filename和*out_filename都是常量字符*。我想在out_filename address写入存储在*in_filename所指地址中的值。例如,如果*in_filname在*out_文件名处为0x7fffffffe930“inputfile.txt”(不同于0x7fffffe930),则指向的地址将存储为“inputfile.txt” 如果我使用上面的代码,out\u文件名将具有与in\u文件名相同的地址,但我希望他具有不同的地址和相同的值(inpu

int main()
*in_filename
*out_filename
都是常量字符*。我想在out_filename address写入存储在*in_filename所指地址中的值。例如,如果*in_filname在*out_文件名处为
0x7fffffffe930
“inputfile.txt”(不同于
0x7fffffe930
),则指向的地址将存储为“inputfile.txt”

如果我使用上面的代码,out\u文件名将具有与in\u文件名相同的地址,但我希望他具有不同的地址和相同的值(inputfile.txt),该值存储在in\u文件名所指的地址

如果我使用

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_文件名有一个地址和存储在其中的正确值。此任务的正确代码是什么

您所问问题的代码是:

#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;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
文件名中的常量字符*;
char*out\u文件名;
in_filename=argv[1];
out_filename=malloc(strlen(in_filename)+1);
strcpy(out\u文件名,in\u文件名);
printf(“%s\n”,在文件名中);
printf(“%s\n”,out\u文件名);
返回0;
}

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

我想您完全搞糊涂了

这里,
argv[1]
是一个指针,指向操作系统分配的内存区域,它在该区域复制传递给程序的第一个参数。当您在_filename=argv[1]中执行
,则使文件名中的
指向同一内存区域

现在,
out\u filename
也是一个指针,但它最初并不指向任何地方。如果在_filename=argv[1]中执行
然后这两个指针都指向前面提到的由操作系统分配的内存区域,因此您的副本将没有意义。当然,这是合法的,你可以做一个strcpy(out\u filename,in\u filename)

如果要
out\u filename
指向不同的有效内存区域,则需要在堆栈上为其分配内存,包括:

char out_filename[strlen(argv[1]) + 1];
或者在堆上使用:

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

然后使用strcpy(out\u文件名,in\u文件名)
进行复制

请向我们展示您目前拥有的完整代码。更具体地说,您的问题是:它正在打开一个您没有指定名称的文件吗?或者以特定格式写入指针值(到文件)?是否要复制指针,如
out\u filename=in\u filename
?或者您想将
in_filename
的内容复制到
out_filename
指向的位置(在您指向某个地方之后),如
strcpy(out_filename,in_filename)
?谢谢,我想完成第二个变体:o将in_filename的内容复制到out_filename指向的位置(在您指出某个地方之后),如strcpy(out_filename,in_filename)。作为旁注,C语言实际上允许您对argv[1]的内存区域进行写访问但是你不能改变分配的文件的大小。还有一个C语言的奇怪之处。谢谢!out_文件名的格式必须是常量字符*所以我把out_文件名=(char*)malloc(strlen(in_文件名)+1;out_文件名=(const char*)malloc(strlen(in_文件名)+1)改成了out_文件名=(const char malloc(strlen)(in_文件名)+1);“out_filename的格式必须是const char”*-不,不是。你可以按原样将其传递给任何需要
const char*
的函数。此外,尽管它在这段代码中无关紧要,但通常你
完成后,就可以
免费
malloc
的内容。对于我编写的代码的要求来说,这是必不可少的:)再次感谢您!
strlen(argv[1])+1
out_filename = malloc(strlen(argv[1]) + 1);