C 当我检查argv[1]和argv[2]时,我可以';I don’我不能打开信封给他们写信

C 当我检查argv[1]和argv[2]时,我可以';I don’我不能打开信封给他们写信,c,argv,C,Argv,当我检查argv[1]和argv[2]时,我无法打开和写入它们!如果我不写考卷,一切都会好起来的。我还必须使用命令行参数 主要 int main(int argc, char **argv[]) 一部分 while (i < MAXADAT && kilep) { hianyzofajleredmeny = 1; if ((argv[2][i] == '.' && argv[2][i + 1] == 'c' &

当我检查
argv[1]
argv[2]
时,我无法打开和写入它们!如果我不写考卷,一切都会好起来的。我还必须使用命令行参数

主要

int main(int argc, char **argv[])
一部分

while (i < MAXADAT && kilep)
    {
        hianyzofajleredmeny = 1;
        if ((argv[2][i] == '.' && argv[2][i + 1] == 'c' && argv[2][i + 2] == 's' && argv[2][i + 3] == 'v' && argv[2][i + 4] == '\0'))
        {
            hianyzofajleredmeny = 0;
            kilep = 0;
        }
        i++;
while(i

我做错了什么?

没有太大的魔力。您没有显示足够的代码让我们知道您真正在做什么,但此代码会打开
argv[1]
argv[2]
中指定的文件

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: %s file1 file2\n", argv[0]);
        return 1;
    }
    char *dot1 = strrchr(argv[1], '.');
    if (dot1 == 0 || strcmp(dot1, ".csv") != 0)
    {
        fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[1]);
        return 1;
    }
    FILE *fp1 = fopen(argv[1], "r");
    if (fp1 == 0)
    {
        fprintf(stderr, "%s: failed to open %s for reading\n", argv[0], argv[1]);
        return 1;
    }
    char *dot2 = strrchr(argv[2], '.');
    if (dot2 == 0 || strcmp(dot2, ".csv") != 0)
    {
        fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[2]);
        return 1;
    }
    FILE *fp2 = fopen(argv[2], "w");
    if (fp2 == 0)
    {
        fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], argv[2]);
        return 1;
    }

    char buffer[1024];
    size_t nbytes;

    while ((nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp)) != 0)
        fwrite(buffer, sizeof(char), nbytes, fp2);

    fclose(fp1);
    fclose(fp2);
    return 0;
}
#包括
#包括
int main(int argc,字符**argv)
{
如果(argc!=3)
{
fprintf(stderr,“用法:%s file1 file2\n”,argv[0]);
返回1;
}
char*dot1=strrchr(argv[1],'.');
如果(dot1==0 | | strcmp(dot1,“.csv”)!=0)
{
fprintf(stderr,“%s:文件%s不是CSV文件\n”,argv[0],argv[1]);
返回1;
}
文件*fp1=fopen(argv[1],“r”);
如果(fp1==0)
{
fprintf(stderr,“%s:无法打开%s进行读取,\n”,argv[0],argv[1]);
返回1;
}
char*dot2=strrchr(argv[2],'.');
如果(dot2==0 | | strcmp(dot2,“.csv”)!=0)
{
fprintf(stderr,“%s:文件%s不是CSV文件\n”,argv[0],argv[2]);
返回1;
}
文件*fp2=fopen(argv[2],“w”);
如果(fp2==0)
{
fprintf(stderr,“%s:无法打开%s进行写入,\n”,argv[0],argv[2]);
返回1;
}
字符缓冲区[1024];
大小n字节;
而((nbytes=fread(buffer,sizeof(char),sizeof(buffer,fp))!=0)
fwrite(缓冲区,大小(字符),n字节,fp2);
fclose(fp1);
fclose(fp2);
返回0;
}
错误检查
fclose(fp2)
是明智的;如果失败,则输出文件未成功创建。一般来说,错误检查
fclose(fp1)
不太重要

代码将受益于错误报告函数,因此错误报告块只占用一行,而不是四行,但是编写一个函数来完成这项工作只是比您准备处理的要复杂一点。虽然不太复杂,但足够让我不会让您负担过重。代码也非常冗长但结果是


代码还假设您有C99或C11,因此您可以在函数中的任意点声明变量。如果您仍然使用C89,那么(a)是时候升级到可以使用只有15年历史而不是25年历史的标准了,以及(b)您必须将所有变量声明移到函数顶部,并将初始化更改为赋值。

请发布不起作用的实际代码。顺便说一句,您在此处的长行可以替换为
!strcmp(argv[2]+i,“.csv”)
这里有一个链接!整个程序!基本上我打开了一个cvs文件,并用它们制作了一个任务,然后我写了一个新的csv文件!显然,我必须下载一个.exe才能从该站点获取内容。除了一个事实,
.exe
不能在Mac上运行之外,我不会使用一个需要下载程序的站点来完成像这样琐碎的事情这个,我希望你能看到!