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 для обработки ошибок
- Выход из программы с кодом ошибки
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д