【发布时间】:2019-08-08 08:01:52
【问题描述】:
int main() 采用 1 个命令行参数:in_filename = argv[1](命令行参数示例:inputfile.txt)。 *in_filename 和 *out_filename 都是 const char *。我想将存储在 *in_filename 指向的地址中的值写入 out_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 相同的地址,但我希望他具有与存储在 in_filename 指向的地址处的地址不同的地址和相同的值 (inputfile.txt)。
如果我使用
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 有一个地址和存储在其中的正确值。此任务的正确代码是什么?
【问题讨论】:
-
请向我们展示您目前拥有的完整代码。并且更具体地说明您的问题:它是否打开了您未指定名称的文件?或者以特定格式写入指针的值(到文件)?
-
是否要复制指针,如
out_filename = in_filename?还是要将in_filename的内容复制到out_filename指向的位置(在您将其指向某处之后),如strcpy(out_filename, in_filename)中的那样? -
谢谢,我想完成第二个变体: o 将 in_filename 的内容复制到 out_filename 指向的位置(在你让它指向某个地方之后),如 strcpy(out_filename, in_filename)。跨度>
-
附带说明,C 语言实际上允许您对 argv[1] 的内存区域进行写访问,但您不能更改那里分配的内存区域的大小。又一个 C 语言怪事。
标签: c pointers memory dereference