|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 23:06)
| | C++ это расширение C - поэтому все библиотеки С в C++ имеются. Вообще C++ основан на стандарте С89, однако уже появился стандарт C99, который тем не менее мало кем поддерживается. | |
|
|
|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 23:06)
| | Про преобразование нашел сам:
Поэтому заменяю эот вопрос следующим: :))
char ** str_array = new char*[10];
|
Как теперь можно узнать размер этого массива?
sizeof(str_array) возвращает 4 - т.е. насколько я понимаю размер указателя на начало массива... | |
|
|
|
|
|
|
|
для: cheops
(04.05.2006 в 21:34)
| | Хм а разве в С++ вообще есть функция malloc? Я думал это функция С (без ++ :) )
И где все таки удалять выделенную память? :)
Да и ещё вопрос на засыпку. :) Как преобрзовать char * в CString? | |
|
|
|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 19:41)
| | Да в C++ лучше использовать new. | |
|
|
|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 20:43)
| | А вот ещё вопросик маленький.Допустим у меня есть метод:
Он должен вернуть указатель на строку, строку эту я динамически создаю в этом методе:
char * CMyClass::Method( void )
{
char * str = new char[10];
...
return str;
}
|
Как и где нужно освобождать память для str? | |
|
|
|
|
|
|
|
для: Trianon
(04.05.2006 в 20:26)
| | Тьфу! :)) Я только что понял что я сказал :)) Спасибо Вам огромное!!! Что самое интересное,что раньше пробовал тоже самое и не получалось :)) | |
|
|
|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 20:18)
| | Я, честно говоря, не понял в чем трудность. В методе init и в деструкторе цикл не написать? | |
|
|
|
|
|
|
|
для: Trianon
(04.05.2006 в 19:49)
| | О, это похоже то что надо, хотя может и нет...
Вообщем усложним немного задачу и будем использовать не одну строку а массив таких строк, т.е.:
char ** str = new char*[10]
|
т.е. 10 строк... (эта цифра задается динамически)
Так вот в методе Init нужно забить этот массив значениями так чтобы потом в деструкторе он нормально удалился... Все строки произвольной и разной длинны... Как посоветуете это осуществить? | |
|
|
|
|
|
|
|
для: Евгений Петров
(04.05.2006 в 19:38)
| | Тогда и копировать надо туда, где эта память распределена. Только туда больше 6 байт (в Вашем примере ) не положишь.
void CTest::Init(char * nStr)
{
strncpy(str, nStr, 6);
}
|
Или распределять память непосредственно перед копированием (возможно, освободив перед этим предыдущий резерв) | |
|
|
|
|
|
|
|
для: Trianon
(04.05.2006 в 19:07)
| | Да, кстати, я на С++ пишу... malloc - это если мне память не изменяет в С аналог new, поэтому писать надо тогда:
#include <string.h>
void main()
{
char * str1 = "str1";
char * str2 = "str2";
str1 = new char[strlen(str2)+1];
strcpy(str1,str2);
}
|
| |
|
|
|
|