当我检查argv [1]和argv [2]时,我无法打开并写入它们

时间:2014-06-10 04:04:29

标签: 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[2][i + 2] == 's' && argv[2][i + 3] == 'v' && argv[2][i + 4] == '\0'))
        {
            hianyzofajleredmeny = 0;
            kilep = 0;
        }
        i++;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

没有太大的魔力。您没有显示足够的代码让我们了解您的真实情况,但此代码会打开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;
}

错误检查fclose(fp2)是明智的。如果失败,则表示未成功创建输出文件。一般来说,错误检查fclose(fp1)并不重要。

代码将受益于错误报告功能,因此错误报告块每个只占用一行而不是四行,但编写一个函数来完成这项工作只是比你准备交易时要复杂一点。用。从根本上说并不复杂,但足够我不会让你过度负担。但是,代码非常冗长。

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