Jump to content
СофтФорум - всё о компьютерах и не только

C++. HelpMe.


Recommended Posts

ОООО! Если ты юзаешь 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;
Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

kolya7k

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

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

Help

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

HelpMe

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

ОК

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...