Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Рекомендуемые сообщения

ОООО! Если ты юзаешь VCL (Borland C++ Builder)

То всё очень просто:

Messagebox (0, (AnsiString(h)+AnsiString(m)).c_str() , "Help", mb_ok);

Если же MFC (Visual C++)

То так:

int hlen=lstrlen(h),mlen=lstrlen(m);char *hm=new char[hlen+lstrlen(m)+1];memcpy(hm,h,hlen);memcpy(hm+hlen,m,mlen);hm[hlen+mlen]='\0';Messagebox (0, hm, "Help", mb_ok);delete [] hm;
Ссылка на комментарий
Поделиться на другие сайты

Неееет! Так нельзя.

Потому, что h при инициализации у него имеет ФИКСИРОВАННЫЙ размер, равный (в данном случае - 5 символов)

И когда ты пытаешся запихнуть в него ещё 2 символа, то это будет ошибка.

Это один из примеров так называемых скрытых ошибок, когда их не видно, но оши рано или поздно дают о себе знать.

Если мне не веришь, то посмотри значение переменной h после вызова этоф функции. Оно будет HelpM, да к тому же и без \0.

Ссылка на комментарий
Поделиться на другие сайты

kolya7k

Попробовал на билдере и Visual C++ все в норме и выдает

---------------------------

Help

---------------------------

HelpMe

---------------------------

ОК

---------------------------

Ссылка на комментарий
Поделиться на другие сайты

Это у тебя Visual C++ заботится о программисте, и я же сказал, что ошибки никакой не будет. Будет только запись в память не туда, куда надо.

Функция strcat НЕ изменяет размер массивов. Об этом должет заботиться сам программист.

А вот в Borland C++ Builder 6 есть такая утилита, как Code Guard. Вот она предупреждение и выдаёт!

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...