Segmentation fault при попытке чтения файла (которого нет) - C (СИ)
Формулировка задачи:
Новичок в С. Сижу под линухом. Что-бы освоить аргументы командной строки и i/o файлов в С решил написать программу.
Как итог программа собирается, но при запуске любыми аргументами (и без них) выдаёт
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <errno.h> #include <string.h> int main(int argc, char *argv[]){ FILE *fp; if(strcmp(argv[1],"-r")==0){ fp = fopen(argv[2],"r"); if(strcmp(fp,"NULL")){ fprintf(stderr, "Can't open input file %s!\n", argv[2]); exit(ENOENT); } char buff[50]; while(!feof(fp)){ fgets(buff, 50, fp); printf("%s\n", buff); } fclose(fp); exit(0); } if(strcmp(argv[1],"-w")==0){ fp = fopen(argv[2], "w"); if(strcmp(fp,"NULL")){ fprintf(stderr, "Can't open output file %s!\n", argv[2]); exit(ENOENT); } fprintf(fp, argv[3]); fclose(fp); exit(0); } printf("Use "-r \'inputfile\'" to read file.\n"); printf("Use "-w \'outputfile\' \'inputtext\'" to write into file.\n"); exit(EINVAL); return 0; }
Segmentation fault
(Exit code 139).Решение задачи: «Segmentation fault при попытке чтения файла (которого нет)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <errno.h> #include <string.h> int main(int argc, char *argv[]){ FILE *fp; if(strcmp(argv[1],"-r")==0 ){ fp = fopen(argv[2],"r"); if(!fp){ fprintf(stderr, "Can't open input file %s!\n", argv[2]); exit(ENOENT); } char buff[50]; while(!feof(fp)){ fgets(buff, 50, fp); printf("%s\n", buff); } fclose(fp); exit(0); } if(strcmp(argv[1],"-w")==0){ fp = fopen(argv[2], "w"); if(!fp){ fprintf(stderr, "Can't open output file %s!\n", argv[2]); exit(ENOENT); } fprintf(fp, "%s", argv[3]); fclose(fp); exit(0); } printf("Use -r \'inputfile\' to read file.\n"); printf("Use -w \'outputfile\' \'inputtext\' to write into file.\n"); exit(EINVAL); return 0; }
Объяснение кода листинга программы
- Объединение стандартных библиотек
- Объявление main функции
- Проверка аргументов командной строки
- Открытие файла для чтения или записи
- Проверка успешного открытия файла
- Чтение файла построчно и вывод на экран
- Закрытие файла после чтения или записи
- Выход из программы с кодом ошибки
- Вывод сообщения об использовании флага -r
- Вывод сообщения об использовании флага -w
- Вывод сообщения об ошибке при неправильном использовании флага -w
- Выход из программы с кодом ошибки
- Объявление переменной fp для работы с файлами
- Объявление массива buff для чтения текста из файла
- Проверка конца файла перед чтением
- Вывод прочитанной строки из файла
- Закрытие файла после чтения или записи
- Выход из программы с кодом ошибки
- Объявление флага EINVAL для обработки ошибок
- Выход из программы с кодом ошибки
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д