Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2017, 03:19   #121
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Вот в этом месте и правда удивительно, щас попробую на спарке.
Код работает:
Код:
#include <iostream>
using namespace std;
int main()
{
	const char* a = "blabla";
	auto la = strlen(a);
	const char* b = new char[la + 1];
	b = "BLABLA";
	auto lb = strlen(b);
	char* c = new char[la + lb + 1];
	strcpy(c, a);
	//strcat(c + la, b);
        strcpy(c + la, a);
	cout << c << endl;
	delete[] c;
	system("pause");
	return 0;
}
Конечно, constы напрягают, ну и ладно, пару лишних переменных придется где-то задать.
И даже не важно, что у меня в конструкторе, чтобы записать в один массив конкантенацию 2-х других будет городулька из 12 строк.
Наверно, именно так выглядит ответ на вопрос "Как склеить 2 массива char*"
Но Warningи всё равно остались...
Консты именно потому, что строка задана в теле программы. Сегменты бинарника в нынешние вирусные времени "только для чтения". Да и без вирусов туда писать западло.
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 03:22   #122
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

А const точно нужно? Без него тоже работает, и на warningи не влияет...
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 03:25   #123
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
А const точно нужно? Без него тоже работает, и на warningи не влияет...
нужно в такой записи

const char* a = "blabla"; //этот фрагмент памяти в бинарном теле проги, менять его низя


...хотя можно, я кадато менял и ловил чудные глюки), но была еще виндовс 95
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 03:26   #124
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Консты именно потому, что строка задана в теле программы. Сегменты бинарника в нынешние вирусные времени "только для чтения". Да и без вирусов туда писать западло.
Из этого я понял только первое предложение. То есть, если у меня там не const, а просто char* - ничего страшного?
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 03:28   #125
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Из этого я понял только первое предложение. То есть, если у меня там не const, а просто char* - ничего страшного?
ну...ваще ниче страшного, пока вы по запарке не начнете писать в этот указатель, а компилятор это не проконтроллирует, потому что нет const
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 03:33   #126
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
ну...ваще ниче страшного, пока вы по запарке не начнете писать в этот указатель, а компилятор это не проконтроллирует, потому что нет const
так ничего страшного, оно же всё в конструкторе будет - там же и удалится. Главное - что не const char* c
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 03:33   #127
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Блин, а варнинги у вас, из-за корявой вашей переделки.....
Вы отут поняли чо сделали?

Код:
const char* b = new char[la + 1];
	b = "BLABLA";
...распределили память! потеряли эту память, заменив указатель на "BLABLA";

т.о. она осталась утечкой

а если ниже сделать

delete []b;

все чудно рухнет при запуске.
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 03:41   #128
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Блин, а варнинги у вас, из-за корявой вашей переделки.....
Вы отут поняли чо сделали?

Код:
const char* b = new char[la + 1];
	b = "BLABLA";
отнюдь, варнинги у меня следующего содержания:
bla.cpp(11): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
bla.cpp(12): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

а с b я просто так сделал "на скорую руку" чтоб проверить, что он может быть динамическим ))
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 03:47   #129
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Но Warningи всё равно остались...
Обычно, компилятор еще пишет какие и где.

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Конечно, constы напрягают
Никого не напрягают, а даже наоборот, делают код проще, понятнее, более доступным для оптимизаций и т.д.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 03:48   #130
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
отнюдь, варнинги у меня следующего содержания
Код:
#define _CRT_SECURE_NO_WARNINGS
//...
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MMX сложить два числа gansm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 29.10.2010 05:16
как сложить два числа с плавающей точкой forsy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 19 29.03.2010 02:15
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 22:02
Сложить два числа и вывести результат на экран We1c0m3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2009 11:41
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27