Unix命令行参数帮助

时间:2011-09-15 22:31:17

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

我目前正在尝试读取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

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

3 个答案:

答案 0 :(得分:3)

尝试

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;
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您需要编译源代码

gcc prob_5.c -o prob_5

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

./prob_5 input.txt

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