如何将存储在另一个指针指向的地址中的值分配给指向指针的地址?
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;
}
函数 strcpy
将 char *
作为目标,而不是 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)
!
进行复制
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;
}
函数 strcpy
将 char *
作为目标,而不是 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)
!