![]() |
|
Модераторы: bsa |
![]()
|
|
| Фишка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.9.2010 Репутация: нет Всего: нет |
Цель: открыть файл по строке, введённой с клавиатуры
Проблема: в имени файла могут быть пробелы, а scanf("%s", sSource); считывает строку до первого пробела (со слов педагога; ох, не удосужилась сама проверить) Для решения проблемы предлагается использовать fscanf(), но в полученной строке последний символ "\0", поэтому при передаче этой строки в fopen() возникает ошибка (нет файла с именем, заканчивающимся на "\0"). Помогите, пожалуйста, как-нибудь удалить NULL-идентификатор из строки или выделить подстроку без него... Вот кусочек кода на Си:
|
|||
|
||||
| EgorTheBlade |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 5.12.2009 Репутация: нет Всего: -1 |
getline() -читает с пробелами. fscanf () \0 видет? -не знал. Попробуйте filesize-1 тогда.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
и как же fopen узнает конец передаваемой строки ? си-строки не могу быть не нуль терминированные, в противном случае это просто набор байт.. ошибку ищете в другом месте.. для начал попробуйте вывести ту строку, которую вы передаете в fopen (); |
|||
|
||||
| Фишка |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.9.2010 Репутация: нет Всего: нет |
EgorTheBlade,
насколько я поняла, getline() - функция C++, нигде не нашла её описания для C. mes,
угу, я тоже так думала но вот описание функции gets()
при замене fgets() на gets() всё прекрасно работает, только компилятор ругается, мол, опасная функция, которую не следует использовать.
выводила, всё корректно во всех способах считывания строки Это сообщение отредактировал(а) Фишка - 17.10.2010, 19:04 |
||||||
|
|||||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
и при чем тут нуль-терминатор ? описание fgets, я надеюсь, Вы тоже прочитали.. и там тоже ставиться нуль в конце строки.. а отличаются вот этим :
Добавлено через 2 минуты и 16 секунд значит плохо сравнивали.. если как вы говоруте замена на gets помогает, значит скорей всего у Вас лишним является перевод строки.. а его заметить при выводе можно )) (если конечно выводить не только строчку, а какие нибудь ориентиры ) |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
"Все перепуталось в доме Облонских" У вас не fscanf, а fgets. И не "\0", а "\n". Удалить можно так: strtok(sSource,"\n"); |
|||
|
||||
| Фишка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.9.2010 Репутация: нет Всего: нет |
xvr,
даааа, запуталось) описалась, правильно fgets() ) не знала, правильно '\n' убирается, оказывается, присваиванием последнему (тот который '\n') элементу значение '\0' всё равно всем спасибо) сдала) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |