Преобразование int в _TCHAR
Если подставляем 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)-
На первый взгляд вроде все просто
Если подставляем char в массив
При выводе массива получаем то что нужно.
А при попытке подставить int преобразованное в char
Получаем ошибку: "Run-Time Check Failure #3 - The variable 'value' is being used without being defined." Помогите разобратся в чем дело X)-
Ты пытаешься пользоваться указателем, как массивом. По-моему _itoa не создает нового char массива в памяти . Попробуй.
_itoa(ID, value, 10);
_TCHAR *ItemText[256]={value};
P.S. И разьве строка char должна занимать только один _TCHAR?
P.S. И разьве строка char должна занимать только один _TCHAR?
Спасибо помогло. Это я просто плохой пример привел, там остальные элементы уже заданы с помощью _T()
И еще один вопрос. Никак неполучается этот массив передать как аргумент функции, подскажите как это правильно сделать.
А какой функции?
char *value;
_itoa(ID, value, 10);
Оригинальный код , а инициализировать указатель до его использования ты не пробовал , говорят помогает
char *value = new char [n];
_itoa(ID, value, 10);
Оригинальный код , а инициализировать указатель до его использования ты не пробовал , говорят помогает
char *value = new char [n];
_itoa(ID, value, 10);
Надо было написать, чтобы он не забыл его потом удалить, а то следующий вопрос будет по Detected memory leaks!
А какой функции?
А разве есть разница?
Вообщем мне надо передать этот массив (типа _TCHAR) функции которая его будет выводить в List Control, но правильно передать не получается.
А разве есть разница?
Вообщем мне надо передать этот массив (типа _TCHAR) функции которая его будет выводить в List Control, но правильно передать не получается.
Функция написана тобой, ты имеешь возможность изменять её? Какой у нее интерфейс?
Решение большинства проблем - это более полное использование С++. В данном случае ты работаешь с С++ на уровне С.
На уровне С ты не сможешь передавать массив, именно как такой тип. Тебе предется передавать массив указателей завершенный нулевым указателем, как указатель на указатель. Либо дополнительно передавать размер массива:
{
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)
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) передача массива в шаблонную функцию по ссылке
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);
и др.