|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.04.2010, 13:14 | #1 |
Форумчанин
Регистрация: 20.03.2009
Сообщений: 272
|
Память для динамической строки
Здравствуйте, вот возникла проблема, над которой ломаю голову всё утро. При создании динамического массива и введении в него более одного символа, массив заполняется каким-то мусором и функция strlen, возвращает 0.
Пытаюсь написать текстовый редактор на C, но не получается даже просто строку правильно заполнить и вывести на экран. Вещь в том, что мне нужно знать где находится последний введенный мною символ, чтобы после него добавить символ конца строки. Пожалуйста подскажите что я упускаю из виду? (MS VS 2008) Код:
|
29.04.2010, 14:15 | #2 |
Форумчанин
Регистрация: 24.11.2007
Сообщений: 196
|
Во первых это не Си.( В си нет new и delete).
вместо strcpy() можно заполнить editor нулями ('\0'), memset(editor, 0, 100). или использовать вместо new, malloc( size_t size ) А что по поводу символа конца строки, так разве он не заносится в editor когда пользователь нажимает ввод? Код:
Последний раз редактировалось Goblin; 29.04.2010 в 14:23. |
29.04.2010, 14:23 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
в свое время применял это для новых строк.
Код:
в таком случае нулевой символ будет с самого начала заполнен и strlen вернет то что надо(count-1). Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
29.04.2010, 15:02 | #4 |
Форумчанин
Регистрация: 26.04.2010
Сообщений: 328
|
то что у строки в данный момент нет конца, поэтому strlen() сработает неправильно.
|
29.04.2010, 15:17 | #5 |
Форумчанин
Регистрация: 20.03.2009
Сообщений: 272
|
Goblin,
Это действительно C, консольное приложение. Компилятор ругается на использование malloc. Пепел Феникса, Спасибо, это может пригодиться, но всё же вопрос не совсем в этом. Вопрос в том, почему после ввода второго символа массив заполняется мусором(символ '=') и как этого избежать. ozo, Спасибо, до этого я додумался, но вопрос не в том почему не выводится строка, а как сделать так, чтобы в массив можно было вносить информацию без мусора. Используя вот этот код Код:
примерно так |
29.04.2010, 15:21 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
массив изначально обычно заполнен им, но так как мусор одинаков, то похоже что винда(или С) так инициализирует память.
Код:
Код:
в студии пишете? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
29.04.2010, 15:27 | #7 | |
Форумчанин
Регистрация: 20.03.2009
Сообщений: 272
|
Ага VS 2008.
Цитата:
Код:
|
|
29.04.2010, 15:31 | #8 |
Я
Форумчанин
Регистрация: 24.04.2010
Сообщений: 693
|
Код:
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©. |
29.04.2010, 15:33 | #9 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
мы же копируем строку, а не заполняем её Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
29.04.2010, 15:37 | #10 |
Форумчанин
Регистрация: 20.03.2009
Сообщений: 272
|
mrChester,
Сделал, после того, как я заполняю массив хотябы одним симвлом, все оставшиеся элементы массива заполняются символом "=", а последние четыре похожи на звездочку. При том размер массива становится вместо 100, как задано изначально в 105 элементов. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование метода двойной буферизации для динамической графики(избавление от мерцания) | noxin | Win Api | 1 | 05.04.2010 20:08 |
Win Api: использование метода двойной буферизации для динамической графики(избавление от мерцания) | noxin | Помощь студентам | 0 | 05.04.2010 19:55 |
Найдите ошибку. Строки. Динамич. память | Познающий | Общие вопросы C/C++ | 8 | 04.09.2009 17:37 |
Возможно ли сделать рабочий Transparent для Image, созданной на динамической форме2, для формы1. | Лукманов Александр | Мультимедиа в Delphi | 3 | 27.04.2009 14:12 |
Динамический Label для динамической формы... | Arkuz | Общие вопросы Delphi | 8 | 25.09.2007 00:03 |