【问题标题】:Unix Command Line Parameter HelpUnix 命令行参数帮助
【发布时间】:2011-11-18 06:53:43
【问题描述】:

我目前正在尝试读取 15,000 个整数的输入文件并将这些值传递到数组中。在将命令行参数传递到程序中时,我真的很生疏,所以也许我没有以正确的方式这样做。到目前为止,这是我编写的代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
int i;
FILE *fp;
int c;
int values[15000];
char line[32];
int index = 0;

for (i = 1; i < argc; i++) {
    fp = fopen(argv[i], "r");

    if (fp == NULL) {
        printf(stderr, "cat: can't open %s\n", argv[i]);
        continue;
    }

    while (fgets(line, sizeof(line), fp) != NULL) {
        scanf(line, "%d", values[index];
        index++;
    }

    fclose(fp);
}

return 0;
}

我正在从命令行调用 gcc -o prob_5 input.txt 并收到以下错误消息:

/usr/bin/ld:input.txt: file format not recognized; treating as linker script
/usr/bin/ld:input.txt: syntax error
collect2: ld returned 1 exit status

我的代码或命令行参数是否有错误,或两者都有?

【问题讨论】:

  • @sehe 是的,我不确定在持续练习中提问的协议是什么。我认为每当遇到新问题时都应该编辑帖子,但有人建议我为每个停止点提交一个新问题,以便更快地获得答案。

标签: c unix command-line command-line-arguments


【解决方案1】:

试试

gcc -o prob5 prob5.c
./prob5 input.txt

假设源文件(显示...)被命名为 prob5.c - 你没有提到 :)

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    FILE *fp;
    int values[15000];
    char line[32];
    int index = 0;

    for (i = 1; i < argc; i++)
    {
        fp = fopen(argv[i], "r");

        if (fp == NULL)
        {
            fprintf(stderr, "cat: can't open %s\n", argv[i]);
            continue;
        }

        while (fgets(line, sizeof(line), fp) != NULL && (index < 15000))
        {
            sscanf(line, "%d", &values[index]);
            index++;
        }

        fclose(fp);
    }

    return 0;
}

【讨论】:

  • 哎呀!我的源文件实际上命名为 prob_5.c。谢谢!我也刚刚发现了缺少的括号。
  • 关于 scanf 修复,嗯...我也修复了修复。 :)
  • 我是否正确地将值读入数组?我有一个 printf("%d", values[0]);用于测试第一个索引处是否有值但程序不返回任何值的语句。
  • 是的,我发现了 index
  • 干杯。下次请提及何时发现/修复错误的挑战:) 让我们更清楚你在做什么以及你应该学习什么。 (为了您的良心:您了解所有修复吗?提示:您需要真正阅读 sscanf/scanf 的联机帮助页,至少在 %d 和 sscanf 上;您还发现了一件事是无害的,但也没有用?我删除了它:))祝你好运
【解决方案2】:

需要编译源码

gcc prob_5.c -o prob_5

然后使用命令行参数运行二进制文件

./prob_5 input.txt

你正在做的事情是编译器试图将一堆数字解释为源代码。

【讨论】:

    【解决方案3】:

    问题在于你的执行。 gcc 是一个编译器/链接器,你不应该传入你的输入文件:

    gcc -o prob_5 prob_5.c
    ./prob_5 input.txt
    

    【讨论】:

    • 谢谢!我应该提到我也尝试过这个并且遇到了一堆错误。刚刚注意到我在第 20 行缺少括号。
    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多