Ошибка сегментации - PullRequest
       0

Ошибка сегментации

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

Вот мой код.

#include<stdio.h>

int main(int argc,char** argv)
{
    FILE* fp;
    fp=fopen(argv[1],"r");

    struct element{
        int value;
        char activity;
    };

    typedef struct element element;
    element a;
    printf("%d",feof(fp));
}

Теперь, если я не дам последнюю команду printf, это не даст мне ошибки сегментации, но если я дам ее printf, это даст мнеошибка сегмента.Почему?

Я получил ответ на мою предыдущую проблему, теперь у меня есть другая проблема

У меня есть .txt, добавленный к моему входному файлу в моем make-файле.Теперь у меня есть другая проблема.по команде make выдает ошибку.

0make: *** [a.out] Error 1 

почему?

Ответы [ 2 ]

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

Проверьте возвращаемое значение fopen (ну, проверьте возвращаемое значение любой вызов), возможно, не удалось открыть файл.

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

Поскольку вы не указываете файл в аргументах командной строки или поскольку указанный вами файл не может быть открыт по какой-либо причине.В этом случае fopen возвращает NULL, а когда вы передаете это NULL в feof, происходит сбой программы.Вы должны проверить возвращаемые значения и коды ошибок, особенно когда функции могут возвращать NULL.

Правильный код может выглядеть примерно так:

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

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

    if (argc < 2)
    {
        fprintf (stderr, "Please specify the file name.\n");
        return EXIT_FAILURE;
    }

    fp = fopen(argv[1], "r");

    if (fp == NULL)
    {
        perror ("Cannot open input file");
        return EXIT_FAILURE;
    }

    printf ("%d\n", feof (fp));
    return EXIT_SUCCESS;
}
...