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. Вот она предупреждение и выдаёт! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти