Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование int в _TCHAR

1.9K
13 января 2005 года
Cranky
70 / / 05.10.2003
На первый взгляд вроде все просто

Если подставляем char в массив
Цитата:

char *value="ABCD";
_TCHAR *ItemText[5] =
{
value,
_T("A"),
_T("B"),
_T("C"),
_T("D")
};



При выводе массива получаем то что нужно.

А при попытке подставить int преобразованное в char

Цитата:

char *value;
_itoa(ID, value, 10);
_TCHAR *ItemText[5] =
{
value,
_T("A"),
_T("B"),
_T("C"),
_T("D")
};


Получаем ошибку: "Run-Time Check Failure #3 - The variable 'value' is being used without being defined." Помогите разобратся в чем дело X)-

301
13 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Cranky
На первый взгляд вроде все просто

Если подставляем char в массив


При выводе массива получаем то что нужно.

А при попытке подставить int преобразованное в char

Получаем ошибку: "Run-Time Check Failure #3 - The variable 'value' is being used without being defined." Помогите разобратся в чем дело X)-


Ты пытаешься пользоваться указателем, как массивом. По-моему _itoa не создает нового char массива в памяти . Попробуй.

 
Код:
char value[256];
_itoa(ID, value, 10);
_TCHAR *ItemText[256]={value};

P.S. И разьве строка char должна занимать только один _TCHAR?
1.9K
13 января 2005 года
Cranky
70 / / 05.10.2003
Цитата:
Originally posted by lord Kelvin

P.S. И разьве строка char должна занимать только один _TCHAR?


Спасибо помогло. Это я просто плохой пример привел, там остальные элементы уже заданы с помощью _T()

1.9K
13 января 2005 года
Cranky
70 / / 05.10.2003
И еще один вопрос. Никак неполучается этот массив передать как аргумент функции, подскажите как это правильно сделать.
301
13 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Cranky
И еще один вопрос. Никак неполучается этот массив передать как аргумент функции, подскажите как это правильно сделать.


А какой функции?

10.0K
13 января 2005 года
Scorp
1 / / 13.01.2005
Цитата:

char *value;
_itoa(ID, value, 10);



Оригинальный код , а инициализировать указатель до его использования ты не пробовал , говорят помогает

char *value = new char [n];
_itoa(ID, value, 10);

527
14 января 2005 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by Scorp


Оригинальный код , а инициализировать указатель до его использования ты не пробовал , говорят помогает

char *value = new char [n];
_itoa(ID, value, 10);


Надо было написать, чтобы он не забыл его потом удалить, а то следующий вопрос будет по Detected memory leaks!

1.9K
14 января 2005 года
Cranky
70 / / 05.10.2003
Цитата:
Originally posted by lord Kelvin

А какой функции?



А разве есть разница?
Вообщем мне надо передать этот массив (типа _TCHAR) функции которая его будет выводить в List Control, но правильно передать не получается.

3
14 января 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Cranky

А разве есть разница?
Вообщем мне надо передать этот массив (типа _TCHAR) функции которая его будет выводить в List Control, но правильно передать не получается.



Функция написана тобой, ты имеешь возможность изменять её? Какой у нее интерфейс?

Решение большинства проблем - это более полное использование С++. В данном случае ты работаешь с С++ на уровне С.
На уровне С ты не сможешь передавать массив, именно как такой тип. Тебе предется передавать массив указателей завершенный нулевым указателем, как указатель на указатель. Либо дополнительно передавать размер массива:

Код:
void func1(TCHAR** p)
{
  while(p && *p)
  {
    ...........
  }
}

void func2(TCHAR** p, size_t sz)
{
  for(size_t i=0; i<sz; i++)
  {
    ...........
  }
}

TCHAR *ItemText[] =
{
value,
_T("A"),
_T("B"),
_T("C"),
_T("D"),
NULL     // terminator
};

func1(ItemText);
func2(ItemText, sizeof ItemText);


Если же использовать С, то все становится очевиднее и проще. Варианты на выбор:

1) использование контейнеров (std::list, std::vector)
Код:
typedef std::list<std::wstring> TPramList;

void func(TPramList& lst)
{
  for(TPramList::iterator = lst.begin(); it != lst.end(); it++)
  {
    .............
  }
}

TPramList ItemText;
ItemText.push_back( toString(ID) );
ItemText.push_back(_T("A"));
ItemText.push_back(_T("B"));
ItemText.push_back(_T("C"));
ItemText.push_back(_T("D"));

func(ItemText);

Реализацию метода toString можно найти здесь.

2) передача массива в шаблонную функцию по ссылке
Код:
template<typename T>
void func(T& lst)
{
  for(int i=0; i<sizeof(T); i++)
  {
    ..........
  }
}

TCHAR *ItemText[] =
{
value,
_T("A"),
_T("B"),
_T("C"),
_T("D")
};

func(ItemText);

и др.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог