Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: (язык си) EOF считается за строку символов?  (Прочитано 1067 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн WhiteLedy

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
  • https://github.com/WhiteLaedyAnn
    • Просмотр профиля
Подсчитывала строки символов в файле (когда он пустой) и в результате получаю что там есть одна символьная строка хотя там может быть разьве что EOF - этот /0 или как там его... :-\
может у меня просто код кривой
(Нажмите, чтобы показать/скрыть)

Или он начинает считать с нуля а не с единицы ;D
Кто точно знает? ??? :P :coolsmiley:
*/ ///______I BANGBANG   
) . /_(_)             
/__/

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5729
  • Все по палатам!
    • Просмотр профиля
Функция fscanf(f,"%s", a); считывает на строку, а слово.
Чтобы проверить EOF надо хотя бы что-то прочитать из файла, поэтому feof надо проверять после чтения.
a[30] - маловат буфер, может быть баг, так как fscanf не проверяет выход за пределы массива
Что-то типа такого (не считает последнюю пустую строку)
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 05 Июля 2014, 22:17:16 от SergeyIT »
Извините, я все еще учусь

Оффлайн WhiteLedy

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
  • https://github.com/WhiteLaedyAnn
    • Просмотр профиля
Да, здорово, это работает! :)
Но что значит *a=0?(в строке 8 там где начало цикла) Указатель? Зачем?
*/ ///______I BANGBANG   
) . /_(_)             
/__/

whatdoyouneed

  • Гость
Цитировать
a[30] - маловат буфер

"Маловат" любой буфер. *scanf cо спецификатором "%s" - это тоже самое, что gets - источник знаменитейших взломов в истории Юникс. Поэтому да, только fgets.

А *a=0 - это запись 0 в первый байт массива "a", то есть предварительная запись в массив пустой строки. Это не объявление переменной, поэтому здесь звездочка означает взятие lvalue из указателя (имя массива в некоторых случаях выступает в качестве указателя на первый элемент массива).
« Последнее редактирование: 06 Июля 2014, 15:10:13 от Andrey P. »

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5729
  • Все по палатам!
    • Просмотр профиля
WhiteLedy,
То же что и
a[0]=0;
Извините, я все еще учусь

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
man getline

Оффлайн WhiteLedy

  • Автор темы
  • Любитель
  • *
  • Сообщений: 88
  • https://github.com/WhiteLaedyAnn
    • Просмотр профиля
WhiteLedy,
То же что и
a[0]=0;
О, ясно) спасибо^^
*/ ///______I BANGBANG   
) . /_(_)             
/__/

 

Страница сгенерирована за 0.059 секунд. Запросов: 25.