Создание динамического массива CHAR

OlegM
Offline
Зарегистрирован: 14.06.2016

Все забылось, давно не кодил, пару дней как вспоминаю все..

Интересует как создать динамический массив char

char *str = new char[128];
 // вот как можно присвоить значения что-бы типа так
str = "my new string";
// а не записывать все тип так 
str[0] = 'm';
str[1] = 'y';
str[2] = ' ' ; // etc.
delete[] str;

 

 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
char* str = new char[128];

strcpy(str,"my new string");

...

delete [] str;

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это если в куче создавать. А если на стеке, то почти также

template <typename T> inline Print & operator << (Print &s, T n) { s.print(n); return s; }

void f(const int n) {
	char s[n];
	strcpy(s, "Kaka");
	Serial << "n=" << n << "; sizeof(s)=" << sizeof(s) << "; s=" << s << '\n';
}

void setup() {
	Serial.begin(115200);
	f(10);
}

void loop() {}

В функции f создаётся массив s длина которого задаётся параметром n

 

OlegM
Offline
Зарегистрирован: 14.06.2016

большое спасибо ребята, мне для кучи надо было, помню, что-то видел про strcpy(), ну и для стека пригодится, счас как раз все читаю про память..

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Динамчический массив на стеке с длиной из параметра? А это не бред часом? Что-то в КиР писали, что нельзя так.

Datak
Offline
Зарегистрирован: 09.10.2014

Ворота пишет:
Динамчический массив на стеке с длиной из параметра? А это не бред часом? Что-то в КиР писали, что нельзя так.

Нельзя. Было.
Но стандарты не вечны - они иногда обновляются, и теперь такие фокусы считаются вполне допустимыми.

Разумеется, возможность нужно уточнять для каждого конкретного компилятора.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ворота пишет:
Динамчический массив на стеке с длиной из параметра? А это не бред часом? Что-то в КиР писали, что нельзя так.

Вы, видимо КиР читали тогда же, когда и я :) В современных перизданиях это вроде уже есть.

А вообще, такая возможность появилась в стандарте ISO C99 - всего семнадцать лет назад, так что Вы, видимо просто не успели ещё про неё узнать :)))

А вообще, кто мешает загрузить скетч и попробовать?