![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
![]()
Написал две функции. Первая записывает в файл, вторая считывает и выводит на экран.
Но почемуто когда открываешь файл, независимо от того - в ручную или через прогу - вместо информациия всякаячушь типа " "@јT &@ " или 0; Мож кто-нибудь знает в чем дело. Заранее спасибо! Код:
|
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Потому, что размер поля "name" в структуре - 1 байт (и в определении zapis_v_fail - тоже). Насколько я понимаю, там должна быть строка(судя по "printf("%s.......", тогда нужно хотя бы объявлять массив.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
Чтобы файл можно было читать "глазами", он должен быть текстовым, т. е. с расширением *txt. Все прочие файлы читаются только программой.
|
![]() |
![]() |
![]() |
#4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
![]()
Спасибо всем за помощь, попробую исправить.
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
![]()
С первой разобрался.
Вот,если кого интересует, исправленный вар. 1 функции. Код:
Последний раз редактировалось Raptor; 25.01.2008 в 00:05. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Raptor, учтите только, что так делать - очень плохой тон и потенциальная опасность стековых эксплойтов. Лучше всё-таки через указатели делать, через старый добрый LPSTR (ну или PCHAR, unsigned char*, как больше нравится)
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
![]()
А можно чуть-чуть подробнне? Спасибо.
Окончательный вариант: Код:
|
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Постараюсь поподробнее. Дело в том, что когда Вы определяете вектора фиксированной длины прямо в стуктуре, есть опасность забыть 1) и поместить такую структуру в стеке в качестве локальной переменной, 2) забыть перед копированием в такую "строку" сравнить размеры источника и приемника. Отсюда вытекает опасность, что Вам в функцию передадут строку длиннее ожидаемой и смогут "перебить" адрес возврата из функции. Это и есть классический стековый эксплойт - страшно опасная вещь, если не принимать меры по предотвращению. И самые эффективные меры, это прежде всего проверять размер параметра. В крайнем варианте я не видел у Вас кода, заполняющего структуру снружи функции, но конструкция "scanf("%s", Info.name);" выгядит очень своеобразно
![]() |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
![]()
Тоесть, Вы советуете использовать здесь вместо scanf другую функцию типа gets?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа, анализирующая текстовые файлы и строящая графики | Karabister | Фриланс | 15 | 08.06.2008 15:30 |
Задача на текстовые файлы | Paul11j | Помощь студентам | 20 | 17.03.2008 13:20 |
текстовые файлы ОЧЕНЬ НУЖНА ПОМОЩЬ | leest | Помощь студентам | 6 | 30.01.2008 10:05 |
Текстовые файлы(задачка). | Vadim2008 | Общие вопросы C/C++ | 1 | 11.01.2008 16:45 |