将命令行争论转换为C中的字符串

时间:2015-10-06 00:59:34

标签: 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);
      }

1 个答案:

答案 0 :(得分:2)

为什么不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()

P.S。 从不使用while(!feof(fp))。只需使用while(fgets(str,4,fp))即可。 有关详细信息,请参阅this question