|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.01.2008, 02:39 | #1 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
Текстовые файлы на С
Написал две функции. Первая записывает в файл, вторая считывает и выводит на экран.
Но почемуто когда открываешь файл, независимо от того - в ручную или через прогу - вместо информациия всякаячушь типа " "@јT &@ " или 0; Мож кто-нибудь знает в чем дело. Заранее спасибо! Код:
|
24.01.2008, 04:23 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Потому, что размер поля "name" в структуре - 1 байт (и в определении zapis_v_fail - тоже). Насколько я понимаю, там должна быть строка(судя по "printf("%s.......", тогда нужно хотя бы объявлять массив.
|
24.01.2008, 08:01 | #3 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Чтобы файл можно было читать "глазами", он должен быть текстовым, т. е. с расширением *txt. Все прочие файлы читаются только программой.
|
24.01.2008, 09:48 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
24.01.2008, 19:19 | #5 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
Спасибо всем за помощь, попробую исправить.
|
24.01.2008, 20:05 | #6 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
С первой разобрался.
Вот,если кого интересует, исправленный вар. 1 функции. Код:
Последний раз редактировалось Raptor; 25.01.2008 в 00:05. |
25.01.2008, 01:02 | #7 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Raptor, учтите только, что так делать - очень плохой тон и потенциальная опасность стековых эксплойтов. Лучше всё-таки через указатели делать, через старый добрый LPSTR (ну или PCHAR, unsigned char*, как больше нравится)
|
26.01.2008, 17:17 | #8 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 50
|
А можно чуть-чуть подробнне? Спасибо.
Окончательный вариант: Код:
|
26.01.2008, 19:27 | #9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Постараюсь поподробнее. Дело в том, что когда Вы определяете вектора фиксированной длины прямо в стуктуре, есть опасность забыть 1) и поместить такую структуру в стеке в качестве локальной переменной, 2) забыть перед копированием в такую "строку" сравнить размеры источника и приемника. Отсюда вытекает опасность, что Вам в функцию передадут строку длиннее ожидаемой и смогут "перебить" адрес возврата из функции. Это и есть классический стековый эксплойт - страшно опасная вещь, если не принимать меры по предотвращению. И самые эффективные меры, это прежде всего проверять размер параметра. В крайнем варианте я не видел у Вас кода, заполняющего структуру снружи функции, но конструкция "scanf("%s", Info.name);" выгядит очень своеобразно , уж извиняйте, все таки быстродействие тоже немаловажный фактор, и кроме того это опасно: scanf не знает размера буфера и будет забивать его пока \0 не попадется.
|
26.01.2008, 19:37 | #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 |