Справка по параметрам командной строки Unix - PullRequest
1 голос
/ 16 сентября 2011

В настоящее время я пытаюсь прочитать во входном файле 15000 целых чисел и передать эти значения в массив. Я очень устала, когда дело доходит до передачи аргументов командной строки в программу, поэтому, возможно, я делаю это неправильно. Вот что я кодировал до сих пор:

#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 ]

3 голосов
/ 16 сентября 2011

Попробуйте

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 голос
/ 16 сентября 2011

Вам необходимо скомпилировать исходный код

gcc prob_5.c -o prob_5

и затем запустите двоичный файл с параметрами командной строки

./prob_5 input.txt

Что происходит с тем, что вы делаете, это то, что компилятор пытается интерпретировать группу чисел как исходный код.

1 голос
/ 16 сентября 2011

Проблема в вашем исполнении.gcc - компилятор / компоновщик, и вы не должны передавать свои входные файлы:

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