Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2013, 14:02   #1
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию fopen возвращает NULL

Здравствуйте.
Есть функция, которая считывает данные из файла и помещает их в массив
Код:
int lmap(char (*map)[30],char name[],int *mapx,int *mapy);
int lmap(char (*map)[30],char name[],int *mapx,int *mapy)
{
	FILE *fmap=fopen(name,"rt");//Передача name в качестве имени файла
	int mnt;
	mapx=mapy=0;
	if (fmap == NULL){
		printw("ERROR!\n");
		return (-1);
	}
	for(mnt=0;!feof(fmap);mnt++){
		if (!feof(fmap))
			fgets(map[mnt],80,fmap);
		/*if (lenstr(map[mnt]) > *mapx)
			*mapx = lenstr(map[mnt]);*/
	}
	fclose(fmap);
	/*mapy=mnt-1;*/
	return 0;
}
Но почему то fopen не принимает массив символов name. Хотя файл записанный в массив существует и как аргумент передается прекрасно(проверено). Более того если передать содержание массива заключив в "" то функция не выдает ошибок.
Т.е. если name == "file.txt" то он возвращает NULL, а если передать ему просто "file.txt" то все работает, хотя это по сути одно и тоже.
Компилятор: GCC
OS: Linux

Последний раз редактировалось Evgenuych96; 28.01.2013 в 14:09.
Evgenuych96 вне форума Ответить с цитированием
Старый 28.01.2013, 14:19   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Если все так, как Вы говорите, то значит в char name[] содержится что-то другое, а не "file.txt". Чему равен name[8] ?
EUGY вне форума Ответить с цитированием
Старый 28.01.2013, 17:54   #3
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Если все так, как Вы говорите, то значит в char name[] содержится что-то другое, а не "file.txt". Чему равен name[8] ?
Я сам также думал, но printw внутри функции доказала что в name правильные данные.
Даже если по отдельности рассматривать каждый элемент, то можно убедится в том что передаются верные данные. Может дело в компиляторе? Хотя я сомневаюсь что GCC виноват в этом.
Evgenuych96 вне форума Ответить с цитированием
Старый 28.01.2013, 18:08   #4
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Эврика! Я понял в чем проблема.
Я провел эксперимент и место "rt" поставил "wt" чтобы он сохранил файл с именем которое ему передается. В имени созданного файла я нашел одно отличие: его имя было на 1 символ больше чем у оригинала => это символ конца строки.
Evgenuych96 вне форума Ответить с цитированием
Старый 28.01.2013, 18:11   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Эврика Насмешил. Говорил же : проверь name[8]
EUGY вне форума Ответить с цитированием
Старый 28.01.2013, 18:19   #6
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

файл не существует.. теперь ищи где ты его создал...
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.01.2013, 18:11   #7
bambarbia
Пользователь
 
Регистрация: 20.10.2011
Сообщений: 44
По умолчанию

а lenstr, это в линуксе такая функция?
bambarbia вне форума Ответить с цитированием
Старый 29.01.2013, 21:39   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
файл не существует.. теперь ищи где ты его создал...
fopen(name,"rt")...
Файл, читается из каталога программы. Вопрос в другом, а есть ли он там?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 30.01.2013, 17:34   #9
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от bambarbia Посмотреть сообщение
а lenstr, это в линуксе такая функция?
Нет это моя функция. Lenstr это сокращение от lengthstring(длина строки), и как видно из названия она счиает кол-во символов в массиве.
Evgenuych96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fopen. protiv Visual C++ 13 13.12.2012 06:13
fopen возвращает NULL. BAH--zer Общие вопросы C/C++ 1 07.05.2012 13:13
не работает fopen() vedro-compota PHP 3 19.04.2012 15:25
fopen Китос Общие вопросы C/C++ 1 29.10.2011 02:14
если поле Patr пусто или null то пустую строку возвращает azat БД в Delphi 5 01.02.2008 13:05