Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > AnsiString, Char


Автор: zzaa 11.4.2009, 19:21
Что делает этая процедура?

void convert (AnsiString text, char out[30])
{
for (int j=0;j<50;j++)
out[j]=0;
for (int j=1;j<=text.Length();j++)
out[j-1]=text[j];
}

Автор: azesmcar 11.4.2009, 19:27
zzaa
судя по названию конвертирует smile а судя по коду выдает что-то вроде Access Violation, хотя я не уверен что это и есть истинное предназначение программы.

Автор: SVN74 11.4.2009, 19:30
Цитата(zzaa @  11.4.2009,  19:21 Найти цитируемый пост)
void convert (AnsiString text, char out[30])
{
for (int j=0;j<255;j++)
out[j]=0;


Тут явно ошибка: out[30] - аннулирует 255 байт

Автор: azesmcar 11.4.2009, 19:37
SVN74

Ну это зависит от того какой параметр передать в принципе..

А код конвертирует AnsiString в char массив. В AnsiString индекс с 1 начинается в отличии от std::string, потому
out[j-1]=text[j];
сработает нормально..хотя бред написан полнейший
в таких случая передается как параметр размер буфера чтобы возложить ответственность на вызывающего функцию. А вообще
AnsiString t;
t.c_str() - если не ошибаюсь дает char*

Автор: zzaa 11.4.2009, 19:38
Цитата(SVN74 @ 11.4.2009,  19:30)
Цитата(zzaa @  11.4.2009,  19:21 Найти цитируемый пост)
void convert (AnsiString text, char out[30])
{
for (int j=0;j<255;j++)
out[j]=0;


Тут явно ошибка: out[30] - аннулирует 255 байт

А если?

for (int j=0;j<50;j++)
out[j]=0;

Автор: azesmcar 11.4.2009, 19:40
zzaa а какая разница?
если передашь массив размером 30 все равно вылетать будет программа.
А зачем обнулять то?

Автор: SVN74 11.4.2009, 19:58
Можно и так:
=====================
void convert (AnsiString text, char out[])
{
   strcpy(out, text.c_str()); // он же и аннулирует все....
}

Автор: zzaa 11.4.2009, 20:10
Цитата(SVN74 @ 11.4.2009,  19:58)
Можно и так:
=====================
void convert (AnsiString text, char out[])
{
   strcpy(out, text.c_str()); // он же и аннулирует все....
}

Так что же делает этая процедура?

Автор: azesmcar 11.4.2009, 20:11
zzaa
Цитата

А код конвертирует AnsiString в char массив. В AnsiString индекс с 1 начинается в отличии от std::string, потому
out[j-1]=text[j];
сработает нормально..хотя бред написан полнейший
в таких случая передается как параметр размер буфера чтобы возложить ответственность на вызывающего функцию. А вообще
AnsiString t;
t.c_str() - если не ошибаюсь дает char*

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)