powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / конструктор
21 сообщений из 21, страница 1 из 1
конструктор
    #34144556
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю (VC2005, win32) конструктор принимающий в качестве аргумента char

Код: plaintext
1.
2.
3.
4.
5.
AnyClass::AnyClass(char pzsChar)
{
void* m_pBuffer = malloc(sizeof(char) *  2 );
/*код*/
strcpy_s((char*)m_pBuffer, &pzsChar, _msize(m_pBuffer)));
}

проверяю
1 Способ:

Код: plaintext
AnyClass any('A'); //- ошибка, недостаточно памяти

2 Способ:

Код: plaintext
1.
char p = 'A';
AnyClass any(p); //- круто!

Насколько я понимаю, в первом случае не создается объекта и указатель на char cылается в никуда, во втором случае создается правильный объект char и указтель смотрит на него

Какой нужен конструктор, чтобы работали оба способа?
Спасибо!

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
конструктор
    #34144725
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недостаточно памяти - malloc возвращает NULL?

strcpy_s аналогична memcpy?
...
Рейтинг: 0 / 0
конструктор
    #34144744
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhНедостаточно памяти - malloc возвращает NULL?

strcpy_s аналогична memcpy?
malloc резервирует как надо, на недостаточность указывает strcpy_s
...
Рейтинг: 0 / 0
конструктор
    #34144770
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrummalloc резервирует как надо, на недостаточность указывает strcpy_s

Что за функция такая интересная?
...
Рейтинг: 0 / 0
конструктор
    #34144773
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Cerebrummalloc резервирует как надо, на недостаточность указывает strcpy_s

Что за функция такая интересная?
А в MSDN описания нету?
...
Рейтинг: 0 / 0
конструктор
    #34144825
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
errno_t strcpy_s(
char *strDestination,
size_t sizeInBytes,
const char *strSource
);

template <size_t size>
errno_t strcpy_s(
char (&strDestination)[size],
const char *strSource
); // C++ only


Не вижу смысла в использонии:

Код: plaintext
1.
strcpy_s((char*)m_pBuffer, &pzsChar, _msize(m_pBuffer)));

Как компилятор, вообще, пропускает?
...
Рейтинг: 0 / 0
конструктор
    #34144831
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичА в MSDN описания нету?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
errno_t strcpy_s(
   char *strDestination,
   size_t sizeInBytes,
   const char *strSource 
);

strDestination
    Location of destination string buffer

sizeInBytes, sizeInWords
    Size of the destination string buffer.

strSource
    Null-terminated source string buffer.

Смотрим порядок параметров ...
Код: plaintext
1.
strcpy_s((char*)m_pBuffer, &pzsChar, _msize(m_pBuffer)));

???
...
Рейтинг: 0 / 0
конструктор
    #34144952
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у конечно прамеипы, но не только. в первом случае имеет место символьная константа из статической памяти, а во втором - символ на стеке, в первом случак не повзло крпировали всю программу в буфер, а во втором - повезло стек то не пользованный нулями забит
...
Рейтинг: 0 / 0
конструктор
    #34144954
abrakadabr13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
AnyClass::AnyClass(char pzsChar)
{
char* m_pBuffer = (char*) malloc(sizeof(char) *  2 );
m_pBuffer[ 0 ]=pszChar;
m_pBuffer[ 1 ]='\0';
}
IMHO так проще, понятнее и быстрее. :)
...
Рейтинг: 0 / 0
конструктор
    #34145474
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Как компилятор, вообще, пропускает?
приношу свои извинения,
это я здесь просто ошибся, в программе два последних параметра стоят на своих местах,

что касается,

abrakadabr13
Код: plaintext
1.
2.
3.
4.
5.
6.
AnyClass::AnyClass(char pzsChar)
{
char* m_pBuffer = (char*) malloc(sizeof(char) *  2 );
m_pBuffer[ 0 ]=pszChar;
m_pBuffer[ 1 ]='\0';
}


то у меня m_pBuffer объявлен void'ом специально, так что не подходит
...
Рейтинг: 0 / 0
конструктор
    #34145656
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrumто у меня m_pBuffer объявлен void'ом специально, так что не подходит

А, например, то же самое, что и abrakadabr13, + С-приведение типов?
...
Рейтинг: 0 / 0
конструктор
    #34145657
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum
что касается,

abrakadabr13
Код: plaintext
1.
2.
3.
4.
5.
6.
AnyClass::AnyClass(char pzsChar)
{
char* m_pBuffer = (char*) malloc(sizeof(char) *  2 );
m_pBuffer[ 0 ]=pszChar;
m_pBuffer[ 1 ]='\0';
}

то у меня m_pBuffer объявлен void'ом специально, так что не подходитОк,
Код: plaintext
1.
2.
3.
void* m_pBuffer = malloc(sizeof(char) *  2 );
((char *)m_pBuffer)[ 0 ]=pszChar;
((char *)m_pBuffer)[ 1 ]='\0';
А char - это один байт, и копировать два байта из переменой типа char нельзя.
...
Рейтинг: 0 / 0
конструктор
    #34145738
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А sizeof(char) * 2 для каких-то своих нужд? Преобразованная строка помещается? Может (sizeof(char)+sizeof(char)) * 2, для завершающего нуля?
...
Рейтинг: 0 / 0
конструктор
    #34145852
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhА sizeof(char) * 2 для каких-то своих нужд? Преобразованная строка помещается? Может (sizeof(char)+sizeof(char)) * 2, для завершающего нуля?
sizeof(char) * 2 как раз для символа и завершающего нуля
...
Рейтинг: 0 / 0
конструктор
    #34145866
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrumsizeof(char) * 2 как раз для символа и завершающего нуля

А, ну да. Что-то предположил самое менее вероятное. ;)
...
Рейтинг: 0 / 0
конструктор
    #34145938
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone , твой пример работает на ура во всех случаях , СПАСИБО!

Только вот встает вопрос, что эффективнее с точки зрения процессорного времени, cделать memset или как предложил, уважаемый Barlone ?

--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
конструктор
    #34146066
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum Barlone , твой пример работает на ура во всех случаях , СПАСИБО!

Только вот встает вопрос, что эффективнее с точки зрения процессорного времени, cделать memset или как предложил, уважаемый Barlone ?


В варианте Barlone нет вызова функции, которая неизвестно, что будет делать.
...
Рейтинг: 0 / 0
конструктор
    #34148552
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этой строчке:
strcpy_s((char*)m_pBuffer, &pzsChar, _msize(m_pBuffer)));

Неправильно вот это: _msize(m_pBuffer)
...
Рейтинг: 0 / 0
конструктор
    #34148554
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может и правильно ...
...
Рейтинг: 0 / 0
конструктор
    #34148561
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Половина проблем у новичков в языке C/С++ непосредственно связанна со строками и строковыми операциями. В очередной раз убеждаюсь в этом.

C уважением
...
Рейтинг: 0 / 0
конструктор
    #34148994
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоловина проблем у новичков в языке C/С++ непосредственно связанна со строками и строковыми операциями. В очередной раз убеждаюсь в этом.

C уважением

т.е. с указателями
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / конструктор
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]