Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Почему Билдер выдет ошибку Write on adrres 0000
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Почему Билдер выдет ошибку Write on adrres 0000 - 27.03.2003, 18:52

AnsiString str;
char s[]="";
str.printf("%s",s);

Вот данный кусочек выдает ошибку на str.printf() Acess violation...
Write on adrres 0000;
Если вместо "char s[]="";" написать char s[]="!";
все работает!
Если вместо str.printf("%s",s); написать str = s;
все работает!
ИМХО, криво реализован AnsiString или ??????

Ваше мнение.

Заранее спасибо!
Ответить с цитированием
  (#2 (permalink)) Старый
Stanis Laugh Stanis Laugh вне форума
Member
 
Сообщений: 163
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.06.2002
По умолчанию 27.03.2003, 18:58

char s[]="";

В этом случае у тебя s - типа char*, то есть указатель. Такая конструкция заставляет компилятор выделять память под значение по этому указателю - НО: размером 0 байт. Компилятор решает, что нет смысла выделять под 0 байт память, поэтому укзателю присваивается значение NULL. Что и генерит ошибку Write on adrres 0000.

И не ругайте мой любимый AnsiString. В нем нет ошибок*!!!!!!

---------
* - с вероятностью 99.9% ))
Ответить с цитированием
  (#3 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 27.03.2003, 19:10

Цитата:
Originally posted by Stanis Laugh
[b]char s[]="";

В этом случае у тебя s - типа char*, то есть указатель. Такая конструкция заставляет компилятор выделять память под значение по этому указателю - НО: размером 0 байт. Компилятор решает, что нет смысла выделять под 0 байт память, поэтому укзателю присваивается значение NULL. Что и генерит ошибку Write on adrres 0000.

И не ругайте мой любимый AnsiString. В нем нет ошибок*!!!!!!

---------
* - с вероятностью 99.9% ))
Прошу прощения, код несовсем такой, а вот какой:
AnsiString str;
char s[20];
lstrcpy(s,"");
str.printf("%s",s);
так вот здесь сразуже выделяеться 20b
а сообщение об ошибке присутствует!
Ответить с цитированием
  (#4 (permalink)) Старый
Puccini Puccini вне форума
Member
 
Сообщений: 107
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.01.2003
По умолчанию 27.03.2003, 23:38

Есть 2 способа. Первый - отказаться от printf и использовать sprintf. Он формирует форматированную строку в памяти. Хотя кажется у AnsiString есть метод Format. Второй вариант несколько сложнее, но надежнее. ВНИМАТЕЛЬНО прочитай описание функции AnsiString::printf
Ответить с цитированием
  (#5 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Да хоть тыща! - 29.03.2003, 16:24

Цитата:
Originally posted by Puccini
[b]Есть 2 способа. ... ВНИМАТЕЛЬНО прочитай описание функции AnsiString::printf
В описании ни чего не сказано о подобном поведении(error)
, а способ как эту ошубку избежать я и сам привел выше(str = s

Дело втом что ошибка есть и некуда не делась.!!!!

И что самое интересное, как будто-то бы это у меня тако такая ошибка, если я разобраля и имею др. варианты, это не значит что кто-то не обламает себе когти.
И если эта ошибка действительно существует нельзя же так просто закрывать на это глаза!
Или все-таки мне выпрямлять пальцы или разработчикам?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Puccini Puccini вне форума
Member
 
Сообщений: 107
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.01.2003
По умолчанию Re: Почему Билдер выдет ошибку? или Глюк в AnsiString? - 29.03.2003, 18:52

Цитата:
Originally posted by repin777
[b]AnsiString str;
char s[]="";
str.printf("%s",s);

Вот данный кусочек выдает ошибку на str.printf() Acess violation...
Write on adrres 0000;
Он говорит, что ошибка записи, а не чтения, поэтому со значением s не может быть связано. В любом случае глюк не здесь. У меня
AnsiString str;
char s[]="";
str.printf("%s",s);
прекрасно работает.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать утилиту для исправления ошибок hdd на с++ 6.0 билдер Cri$ C++ Builder 2 28.04.2011 21:25
Как работать с командой команда write() Булочка C++ на Unix 0 05.04.2010 15:53
Установка маски ввода 0000.0 в текст-боксы на Windows Form lexluther .NET 1 08.08.2008 14:02
Процедура Write в Delphi 7 Виталик 1 Delphi 10 25.07.2008 11:51
Новый DVD-RW выдает ошибку: "привод не готов". Почему? **PeGaS** Техническая поддержка 2 06.06.2007 20:25
Создание независимого exe-файла почему выдает ошибку imported_Dron C++ Builder 4 07.04.2005 16:59
Undefined symbol ini файлы почему выдает ошибку Amo C++ Builder 4 04.04.2005 22:15
Где в интернете скачать Borland c++ не билдер Anonymous С/С++ 6 19.02.2004 13:26
Встраивание в Билдер Anonymous Perl 0 30.11.2003 07:21
Кодировка во write как с ней работать pav DHTML, JavaScript, VBScript 1 11.04.2003 21:19
Почему выдает ошибку??? ПОДСКАЖИТЕ Nat PHP 11 30.01.2003 15:29
С++ билдер клиент и сервер toshkaexe .NET 0 01.01.1970 04:00



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов