Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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) число скопированых байт. Текстовая строка в буфере нулем не закрывается. Это нужно самому делать.
Те добавочные символы, что видны - мусор в памяти |