| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Выделение памяти |
| Автор: Toohtik 26.11.2006, 22:01 | ||||
Есть задача: прочитать и вывести на экран текст из файла. Это все у меня отлично получается. читаю таким образом:
Но как всегда хочется большего - я хочу чтоб readfile[1000] был произвольной длины, т.е. размер определялся в ходе работы программы:
Но почему то при выводе текста выбивает ошибку |
| Автор: neosapient 26.11.2006, 22:36 |
| Было ReadFile(hFile,&readfile,1000,&b,NULL); Надо ReadFile(hFile,readfile,1000,&b,NULL); Тут в качестве второго параметра передавался адрес указателя, а надо сам указатель. P.S. Вместо TextOut используй DrawText |
| Автор: Toohtik 29.11.2006, 00:44 |
| Может вопрос и не сильно относится к теме, но все таки. Почему при чтении из файла в конце всегда добавляется 4 непонятны символа. Ну один я предпологаю - это конец строки, а 3 остальных? |
| Автор: witex 29.11.2006, 01:35 | ||
| ну замени просто четвёртый с конца символ на '\0' Для точности конечно удобно сделать так:
|
| Автор: Toohtik 29.11.2006, 10:50 |
| Та это все понятно |
| Автор: BUGOR 29.11.2006, 11:30 |
| Toohtik, Это ты уже смотри в параметры передаваемые функции, скорее всего ты записываешь больше байт, чем надо, ну т.е. сама ReadFile ничего лишнего в файл не пишет, никаких служебных символов и прочего, всё чётко: сколько сказал - столько записали. |
| Автор: Toohtik 29.11.2006, 14:13 |
| Появилась такая мысль: а может это из за того что я выделяю память равную размеру файла, а не количеству букв в нем? |
| Автор: JackYF 29.11.2006, 18:30 |
| Toohtik, а это что, не одно и то же? |
| Автор: Toohtik 29.11.2006, 21:04 |
| Ну как я подумал, может добавляется еще какая то информация не текстовго характера... Ну к примеру дата создания файла или еще что - то ... |
| Автор: neosapient 29.11.2006, 21:11 | ||
| Я думаю, что у тебя выделен массив, но он не инициализирован. Когда ф-ия ReadFile пишет в буфер, она возвращает в четвертую переменную (b) число скопированых байт. Текстовая строка в буфере нулем не закрывается. Это нужно самому делать.
Те добавочные символы, что видны - мусор в памяти |