Ни как не могу правильно скопировать строку в строку.
LPCTSTR s1 = L"test ";
LPCTSTR s2 = L"";
LPCTSTR s3 = L"проба";
Если присваивать s2=s1; ,то при присвоение s1=s3; значение s2 меняется на s3, а мне это не нужно. Как провильно скопировать значения?
Здравствуйте, solowey, Вы писали:
S>
S>Ни как не могу правильно скопировать строку в строку.
S>LPCTSTR s1 = L"test ";
S>LPCTSTR s2 = L"";
S>LPCTSTR s3 = L"проба";
S>Если присваивать s2=s1; ,то при присвоение s1=s3; значение s2 меняется на s3, а мне это не нужно. Как провильно скопировать значения?
в LPCTSTR — никак. надо сначала убрать константность. если бы был LPTSTR, то надо выделить памяти для новой строки и скопировать с помощью _tstrcpy
Васильич пишет:
> Ни в коем случае нельзя копировать один LPCTSTR в другой LPCTSTR (если
> только под второй явно не выделялась память), иначе получаем UB.
Я хочу подчеркнуть сомнительность вышеприведённой фразы, ведь это
могут прочитать и "слабые духом", начинающие программисты.
Утверждение
"Ни в коем случае нельзя копировать один LPCTSTR в другой LPCTSTR",
если под "копировать" понимать применение оператора присываивания
или его семантического эквивалента, безусловно является неверным.
Присваивать один const char* (или char*) другому МОЖНО, и даже
порой НУЖНО. Но только нужно чётко понимать, что ты делаешь.
А именно -- создаёшь новую ссылку на ТОТ ЖЕ САМЫЙ "объект строки",
хотя конечно никакого объекта строки в С/С++ не существует.
Если это то, что тебе нужно, то -- вперёд. Если нет -- то нет.
Да, и это почти никак не связано ни с UB, ни с выделением памяти.
(ну то есть в принципе всё программирование в С/С++ как-то связано
и с тем, и с другим).
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, MasterZiv, Вы писали:
MZ>Васильич пишет:
>> Ни в коем случае нельзя копировать один LPCTSTR в другой LPCTSTR (если
>> только под второй явно не выделялась память), иначе получаем UB.
MZ>Я хочу подчеркнуть сомнительность вышеприведённой фразы, ведь это
MZ>могут прочитать и "слабые духом", начинающие программисты.
MZ>Утверждение
MZ>"Ни в коем случае нельзя копировать один LPCTSTR в другой LPCTSTR",
MZ>если под "копировать" понимать применение оператора присываивания
MZ>или его семантического эквивалента, безусловно является неверным.
MZ>Присваивать один const char* (или char*) другому МОЖНО, и даже
MZ>порой НУЖНО. Но только нужно чётко понимать, что ты делаешь.
MZ>А именно -- создаёшь новую ссылку на ТОТ ЖЕ САМЫЙ "объект строки",
MZ>хотя конечно никакого объекта строки в С/С++ не существует.
MZ>Если это то, что тебе нужно, то -- вперёд. Если нет -- то нет.
MZ>Да, и это почти никак не связано ни с UB, ни с выделением памяти.
MZ>(ну то есть в принципе всё программирование в С/С++ как-то связано
MZ>и с тем, и с другим).
Да, конечно, я не до конца доформулировал, в целях простоты обьяснения. Я имел в виду, что написав, как в примере, что-то вроде:
LPCTSTR s1 = L"sss";
LPCTSTR s2 = L"";
_tcscpy(s2, s1);
то будет косяк, который еще и хрен найдешь потом, в худшем случае.