mityasv Опубликовано 1 мая, 2003 Жалоба Поделиться Опубликовано 1 мая, 2003 char h[] = "Help"; char m[] = "Me"; Messagebox (0, ...... , "Help", mb_ok); Что нужно написать вместо точек, чтобы получилось "HelpMe", используя h и m ???? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 1 мая, 2003 Жалоба Поделиться Опубликовано 1 мая, 2003 ОООО! Если ты юзаешь 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; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dmc Опубликовано 4 мая, 2003 Жалоба Поделиться Опубликовано 4 мая, 2003 char h[] = "Help"; char m[] = "Me"; strcat(h, m); MessageBox (0, h, "Help", MB_OK); Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 5 мая, 2003 Жалоба Поделиться Опубликовано 5 мая, 2003 Неееет! Так нельзя. Потому, что h при инициализации у него имеет ФИКСИРОВАННЫЙ размер, равный (в данном случае - 5 символов) И когда ты пытаешся запихнуть в него ещё 2 символа, то это будет ошибка. Это один из примеров так называемых скрытых ошибок, когда их не видно, но оши рано или поздно дают о себе знать. Если мне не веришь, то посмотри значение переменной h после вызова этоф функции. Оно будет HelpM, да к тому же и без \0. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
dmc Опубликовано 5 мая, 2003 Жалоба Поделиться Опубликовано 5 мая, 2003 kolya7k Попробовал на билдере и Visual C++ все в норме и выдает --------------------------- Help --------------------------- HelpMe --------------------------- ОК --------------------------- Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 5 мая, 2003 Жалоба Поделиться Опубликовано 5 мая, 2003 Это у тебя Visual C++ заботится о программисте, и я же сказал, что ошибки никакой не будет. Будет только запись в память не туда, куда надо. Функция strcat НЕ изменяет размер массивов. Об этом должет заботиться сам программист. А вот в Borland C++ Builder 6 есть такая утилита, как Code Guard. Вот она предупреждение и выдаёт! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.