Я очень новичок в программировании (и на этом веб-сайте), поэтому спасибо за вашу помощь и ваше терпение. Я пишу функцию, которая подсчитывает количество строк в текстовом файле, но открытие файла всегда возвращает NULL. Я (в основном) уверен, что файл находится в моем текущем рабочем каталоге, однако у меня такая же проблема, когда я использую абсолютный путь. Я просмотрел множество примеров кода, но не могу найти, где я ошибаюсь.
Это код, который я написал для проверки открытия файла:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int fileOpen(char *);
int main()
{
printf("%d", fileOpen("My File.txt"));
return 0;
}
int fileOpen(char *fileName) {
FILE *fp = fopen(fileName,"r");
if (fp == NULL);
return -1;
if (fp != NULL);
return 1;
}
Это всегда возвращает -1. Еще раз спасибо за любую помощь, которую вы можете мне оказать, - Ян
Узнайте, как использовать отладчик. Вы можете запустить свою программу шаг за шагом и, например, проверить значение fp
после fopen
.
ОТ: второе if (fp != NULL)
бессмысленно, потому что здесь fp
всегда отличается от NULL
.
Поскольку вам понадобится этот указатель файла, я предлагаю изменить тип функции на FILE*
и просто return fp;
. Как бы то ни было, вы теряете этот указатель файла. Конечно, вы не можете вывести это с помощью printf
, как вы.
Ваша проблема здесь
if (fp == NULL);
return -1;
То, что вы по существу говорите компилятору,
«Если fp равно нулю». Как ; действует, чтобы закрыть это заявление Вместо этого у вас должна быть только точка с запятой после return -1; такое, что вы сейчас говорите
«Если fp равно нулю, вернуть -1».
Точка с запятой служит для разделения полных выражений, а не только строк.
if (fp == NULL)
return -1;
Кроме того, легко заставить систему сообщить вам, почему fopen не удалось:
if ( fp == NULL ){ perror(fileName); exit(EXIT_FAILURE); }