C-将argv的值分配给变量[closed]

问题描述 投票:-1回答:3

调用程序时,我将.txt文件的名称作为参数解析到命令行中。我想将.txt文件的名称分配给char变量。

enter image description here

这是我的尝试:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv[])
{
    int i;
    for (i=0; i < argc; i++)
        printf("argv[%d] = %s\n", i, argv[i]);

    FILE *fPointer;
    if ((fPointer = fopen("exampleWheel.txt", "r")) == NULL) {
        fprintf(stderr, "can't open file");
        exit(1);
    }

    return 0;
}

在第11行中,我想将字符串“ exampleWheel.txt”替换为argv [1]的值,以便我可以打开任何.txt文件。

请告诉我如何将其应用于现有代码。

提前谢谢您:)

c parsing variables argv argc
3个回答
4
投票

您的最初问题在这里:

int main(int argc, char **argv[])
{

char **argv[]错误。它是char *argv[]char **argv

argv您的间接寻址级别太多。参见:C11 Standard - §5.1.2.2.1 Program startup(p1)。您的编译器应向您发出警告...

您确实启用了警告吗? gcc / clang的-Wall -Wextra -pedantic或VS的/W3。我怀疑在修复main的调用并进行所需的替换后,所有替换都将正常工作。

由于您希望将文件名作为参数传递给main()(这是正确的方法),因此您还需要确保用户在将argv[1]传递给fopen之前提供所有必需的参数。您可以通过简单的if (argc < 2)检查来执行此操作,以检查是否为程序提供了至少2个参数。

合并支票,您可以这样做:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fPointer;

    if (argc < 2) { /* validate required arguments provided */
        fprintf (stderr, "error: insufficient input.\n"
                         "usage: %s <filename>\n", argv[0]);
        return 1;
    }

    if ((fPointer = fopen (argv[1], "r")) == NULL) {
        perror("fopen-argv[1]");       /* a fopen failure sets errno, use perror */
        exit (EXIT_FAILURE);
    }

    return 0;
}

以上注意,在失败时,fopen功能会设置errno,这使您可以使用perror()功能输出系统错误。您可以在fprintf消息之外或代替它使用该消息。当包含stdlib.h时,便具有为EXIT_SUCCESS(值为0)和EXIT_FAILURE(值为1)定义的系统宏,可以使用而不是对exit(1);进行硬编码。由您决定。


1
投票

fopen呼叫中,将"exampleWheel.txt"更改为argv[1]


0
投票

这里有一个实用的例子。您需要跳过argv [0],因为它包含实际的程序调用命令。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    int i;
    char filename[100], c;

    for (i=1; i < argc; i++){

        FILE *fPointer =  fopen(argv[i], "r");

        if (fPointer == NULL) {
            fprintf(stderr, "can't open file");
            exit(1);
        }


        // Read contents from file
        c = fgetc(fPointer);
        while (c != EOF)
        {
            printf ("%c", c);
            c = fgetc(fPointer);
        }
        printf ("\n");

        fclose(fPointer);
    }

    return 0;
}

我希望它会有所帮助! 😃

© www.soinside.com 2019 - 2024. All rights reserved.