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);