我是编程新手。我想采取一个命令行争论,这是一个文件名并打开该特定文件并将内容复制到另一个文件。我不知道如何将命令行争论转换为字符串或文件指针。我检查了我在网上找到的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);
}
答案 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。