Основной файл IO в C - PullRequest
       7

Основной файл IO в C

0 голосов
/ 10 января 2012

Сейчас я работаю на превосходном языке программирования C и застрял при попытке открыть и прочитать файл.Программа компилируется, но выдает ошибки при выполнении:

$ ./a.out 
Segmentation fault

Вот код:

#include <stdio.h>

main()
{
  FILE *fp;
  fp=fopen("/home/c-sandbox/index.html", "r");
  fprintf(fp, "Testing...\n");
  fclose(fp);
}

Обратите внимание, что путь указывает на реальный файл, содержащий строку «привет, мир»,

Есть идеи, где я ошибаюсь?

Ответы [ 5 ]

7 голосов
/ 10 января 2012
  1. Убедитесь, что fp не равно NULL, прежде чем пытаться писать в него. Например:

    if(fp == NULL)
    {
        fprintf(stderr, "Cannot open file\n");
        return EXIT_FAILURE; // defined in stdlib.h
    }
    
  2. Вам нужно открыть файл чем-то, кроме "r", что позволяет только чтение файла. Прочтите справочную страницу для fopen, чтобы узнать, какой режим подойдет вам лучше всего. Пример:

    • "w" - Обрезать до нулевой длины или создать файл для записи.
    • "a" - Добавить; открыть или создать файл для записи в конце файла.
5 голосов
/ 10 января 2012

Вы открыли файл только для чтения и пытаетесь записать в него.

Используйте "a", если хотите добавить в конец существующего файла.

Редактировать: Как уже отмечали другие, вы также не проверяете, был ли файл открыт. fopen вернет NULL в случае сбоя и установит глобальную переменную errno в значение, указывающее причину сбоя. Вы можете получить понятное человеку объяснение, используя strerror(errno)

if( fp == NULL ) {
    printf( "Error opening file: %s\n", strerror( errno ) );
}
1 голос
/ 10 января 2012

Вы должны убедиться, что fopen не возвращает NULL. Я подозреваю, что он возвращает NULL и вызовы fprintf и / или fclose портятся.

1 голос
/ 10 января 2012

Вы открываете его в режиме только для чтения!Нужно использовать w или a для записи / добавления в файл:)

fopen("/home/c-sandbox/index.html", "w");
0 голосов
/ 11 мая 2015
 #include <stdio.h>

    main()
    {
      FILE *fp;

      fp=fopen("/home/c-sandbox/index.html", "r");  
      if(!fp)
      { 
         perror ("The following error occurred");
         return ;
      }

      fgets(line,len,fp);
      printf("%s",line);
      fclose(fp);

     fp=fopen("/home/c-sandbox/index.html", "a");
     if(!fp)
     { 
         perror ("The following error occurred");
         return ;
     }
     fprintf(fp, "Testing...\n");
     fclose(fp)


    }

для чтения строки "привет, мир", присутствующей в файле. после прочтения напишите в тот же файл "Testing ..."

...