Здравствуйте, Вульфович Филипп, Вы писали:
ВФ>Чем отличается:
ВФ>ВФ> char *str = "Hello, world.\n";
ВФ>
ВФ>от
ВФ>ВФ> char *str2 = new char[];
ВФ> strcpy(str2, "Hello, world.");
ВФ>
Второй вариант не скомпилируется. Нужно указать размер, например:
char *str2 = new char[500];
strcpy(str2, "Hello, world.");
ВФ>Выделиться одинаковое кол-во памяти?
ВФ>Нужно ли потом освобождать str и str2?
в первом случае память выделится до выполнения программы, и её выделится столько, чтобы уместить строку "Hello, world.\n" и еще завершающий нулевой байт. То есть 15 байт.
Освобождать её не надо. Но и записывать в эту строку ничего нельзя, потому что она — константа.
Длина str2 как массива — 500 байт (или сколько пожелаете). Длина str2 как строки — 14 символов. Эту длину возвратит strlen(str2).
str2 надо освободить с помощью delete:
delete [] str2; // именно так, с пустыми квадратными скобками
В str2 можно менять символы:
str2[13] = '?'; // меняем точку на вопрос