Возникла проблема с Lpctstr
Есть переменная этого самого типа.
пишу :
LPCTSTR my_str;
my_str="String";
При Debug компиляции на VC++ 7 значение
нормально принемается. Hо в релисе почемуто my_str либо
вобще ни чего не принемает либо заполняется мусором.
Ктото знает почему и что делать с этим ?
Возникла проблема с LPCTSTR.
Есть переменная этого самого типа.
пишу :
LPCTSTR my_str;
my_str="String";
При Debug компиляции на VC++ 7 значение
нормально принемается. Hо в релисе почемуто my_str либо
вобще ни чего не принемает либо заполняется мусором.
Ктото знает почему и что делать с этим ?
LPCTSTR - это указатель, имхо не стоит ставить знак равенства и писать строку.
Возникла проблема с LPCTSTR.
Есть переменная этого самого типа.
пишу :
LPCTSTR my_str;
my_str="String";
При Debug компиляции на VC++ 7 значение
нормально принемается. Hо в релисе почемуто my_str либо
вобще ни чего не принемает либо заполняется мусором.
Ктото знает почему и что делать с этим ?
Вообще странно как-то... Но тем не менее попробуй следующие два варианта:
1) Сразу же присваивать значение при объявлении переменной LPCTSTR my_str = "...";
2) Заместо LPCTSTR использовать LPSTR, то есть char*
Вообще странно как-то... Но тем не менее попробуй следующие два варианта:
1) Сразу же присваивать значение при объявлении переменной LPCTSTR my_str = "...";
2) Заместо LPCTSTR использовать LPSTR, то есть char*
Народ спасибо всем я разобрался сам.
Просто при заполнении этого типа нужно в конце
ставить \0.
LPCTSTR my_str;
my_str="String\0";
В таком случае всё работает нормально.
Народ спасибо всем я разобрался сам.
Просто при заполнении этого типа нужно в конце
ставить \0.
LPCTSTR my_str;
my_str="String\0";
В таком случае всё работает нормально.
Фраза "при заполнении этого типа" некорректная.
Кроме того в конце строкового литерала всегда есть завершающий ноль. Так что твое предположение неверно.
Возможно, проблема кроется в использовании Unicode, т.к. при различных вариантах компиляции макрос LPCTSTR раскрывается в разные типы (const char* или const wchar_t*). Т.о. при раскрытии в const wchar_t* на конце (если смотреть по-байтовый дамп) должно быть два завершающих нуля, но то как ты его сделал - неверно.
Я бы рекомендовал написать строку так:
my_str = _T("String");
Так же обращаю внимание, что макрос раскрывается в указатель на константу.
LPCSTR p_str=str;
Хотя это может быть и глюк.
Гм... Мнится мне что такое присваивание по определению неверно правильно было бы что-то типа этого
LPCSTR p_str=str;
Хотя это может быть и глюк.
Ну это совсем неверно.
Никто не мешает взять указатель на строковый литерал.