在 C 中将命令行参数转换为字符串

标签 c

我是编程新手。我想采用一个命令行参数,它是一个文件名并打开该特定文件并将内容复制到另一个文件。我不知道如何将命令行参数转换为字符串或文件指针。我检查了我在网上找到的 strcpy 和 std::string 但它没有用。请帮我。我在下面粘贴了我的代码

    #include<string.h>
    #include <stdio.h>
    #include <stdlib.h>
    void main(int argc, char *argv[])
    {
    char *inp;
    strcpy(inp,argv[1]);
    FILE *fp;
    char str[5];
    //printf("Enter the file name:");
    //scanf("%s",fname);

     if ((fp= fopen(inp, "r")) == NULL) {
     printf("cannot open file");
     exit(1);
     }
     FILE *fp1;
     fp1=fopen("out.txt","w+");
     while(!feof(fp)) {
     fgets(str,4,fp);
     printf("%s",str);
     fprintf(fp1,"%s",str);
      }

     fclose(fp);
      fclose(fp1);
      }

最佳答案

为什么不 char *inp = argv[1];

或者更好的是:

fp = fopen(argv[1], "r");

你的代码的问题是这样的:

char *inp;
strcpy(inp,argv[1]);

您正在将 argv[1] 复制到 inp 中,但您不知道 inp 指向什么。如果你真的想走那条路,你必须为 inp 分配内存。

char *inp = malloc(strlen(argv[1]) + 1); /* allocate enough for the string and null-terminator */
strcpy(inp,argv[1]); /* copy the contents */

请记住之后 free()

附言从不使用while(!feof(fp))。只需使用 while(fgets(str,4,fp))。 参见 this question了解更多信息。

关于在 C 中将命令行参数转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960125/

相关文章:

c - Valgrind 比较指针与 NULL

c++ - 整数到由位组成的 bool 数组,C++中最有效的方法?

c - 为什么 ping 会收到另一个 ping 命令包?

arrays - strcpy 崩溃程序

c - 循环 scanf 并要求输入带空格的字符串

C 设置一个指向另一个指针的指针并释放

c++ - 将处理器结果保存到 MPI 中的一个数组

c++ - 无法为 i386 构建 PortAudio 以使其与 NI 的 DAQmxBase 兼容

c - 如何使用.so文件运行c程序

C-当我在解释器/编译器中需要它时,在结构中的另一种类型上使用指针