Чтение строки из аргумента командной строки в MPI c

Мне нужно написать программу MPI c. Мой компилятор не распознает строку типа данных, хотя я добавил string.h. Я хочу прочитать строку из командной строки и передать ее функции, указанной ниже

int find_rows(char * file)
{
    int  length=0;
    char buf[BUFSIZ];
    FILE *fp;
    fp=fopen(file, "r");
    while ( !feof(fp))
    {
         // null buffer, read a line
        buf[0] = 0;
        fgets(buf, BUFSIZ, fp);
        // if it's a blank line, ignore
        if(strlen(buf) > 1) 
        {
            ++length;
        }

    }
    fclose(fp); 
#ifdef DEBUG
    printf("lFileLen = %d\n", length);
#endif
return    length;     

}

Эта функция работает, когда у меня есть

 char file[50] = "m5-B.ij";

а потом позвони

nvtxs = find_rows(&file );

Но дает мне ошибку сегментации, когда я даю

 nvtxs = find_rows(argv[1] );

Может кто-нибудь помочь?


person LGG    schedule 22.04.2013    source источник
comment
Вы передаете аргумент main()? Проверьте возвращаемое значение fopen().   -  person hmjd    schedule 22.04.2013
comment
Ага. Я могу прочитать и распечатать значение argv[1] с помощью fprintf или sscanf. Я просто не могу передать его функции   -  person LGG    schedule 22.04.2013


Ответы (1)


Вместо

find_rows(&file );

вызов

find_rows(file );

file уже является указателем. Вы передавали адрес указателя на функцию.

Затем позже в функции find_rows вы пытаетесь открыть недопустимый файл и работать с fp, который является нулевым указателем, вызывающим неопределенное поведение.

ИЗМЕНИТЬ

Ваш звонок nvtxs = find_rows(argv[1] ); правильный. Проблема в том, что fp=fopen(file, "r"); может не открыть файл, если файл не существует или не может найти файл.

person Community    schedule 22.04.2013
comment
Программа работает, когда я передаю find_rows(&file); Но я не хочу жестко кодировать имя файла. Я хочу получить его из командной строки, используя argv. я не могу этого сделать - person LGG; 22.04.2013
comment
@Lopez Проверьте, возвращает ли fopen(file, "r"); NULL. - person ; 22.04.2013
comment
Спасибо, Армин и Эдди. Но дело в том, что я хочу исключить часть файла и вместо этого использовать argv [1] - person LGG; 22.04.2013
comment
@Армин: Да. Не открывает файл. Fp возвращает NULL - person LGG; 22.04.2013
comment
@Lopez файл не существует или не может найти файл. - person ; 22.04.2013
comment
Спасибо, Армин. Я дал правильный параметр, когда жестко запрограммировал его, но дал неправильное имя файла при выполнении. - person LGG; 22.04.2013