Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Подскажите еще такую вещь: есть две строки: 1 - LPWSTR, 2 - LPSTR. Нужно вторую дописать в конец первой. Буду оч признателен за кусок кода. З.Ы. UNICODE не использую.
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    WideCharToMultiByte
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    wsprintf(pOut,"%S%s",first,second)
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    FreeManCPM
    ух ты!
     
  5. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    FreeManCPM

    Возвращать результат надо тоже в LPWSTR, а в моем случае LPTSTR=LPSTR. Соответственно, приведенная тобой строчка работать не будет, так как первый параметр в моем случае LPWSTR
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    wsprintfW(buffer, L"%ls%s", first, second);
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    swprintf(buffer, "%s%S", first, second); - это функция crt
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    swprintf требует аргументы wchar_t*, а не char*, как у тебя. надо поставить L и поменять на %ls первый спецификатор
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ой, точно, L забыл
    а "%s" в ней вроде означает именно wchar_t* строку
    а char* обозначается как "%S"... или я гоню?
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    насчет wsprintfW
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    короче,
    WCHAR buffer[<размер>];
    swprintf(buffer, L"%s%S", first, second);
    wcscpy(first, buffer);
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    лучше wcsncpy, вдруг размера не хватит...
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    Твоя правда. Сейчас ведь в ОЗУ каждый байт на счету. Я вот вчера еще планку на 12 байт прикупил.
     
  15. IceFire

    IceFire New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2006
    Сообщения:
    244
    Great

    Строка second дописалась в результирующую криво - все номера символов > 20 000, отображаются некорректно. Зато их ровно вдвое больше, чем strlen(second).
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    все, релизный вариант...

    wszFirstString - первая строка
    wszSecondString - вторая строка

    #include <strsafe.h>

    ...

    WCHAR wszTempBuffer[<предполагаемый размер буфера>];
    if(StringCbPrintfW(wszTempBuffer, sizeof(wszTempBuffer), L"%s%S", wszFirstString, wszSecondString)!=S_OK)
    <обработка ошибок>

    if(StringCchCopyNW(wszFirstString, <рамер буфера под wszFirstString>, wszTempBuffer, sizeof(wszTempBuffer))!=S_OK)
    <обработка ошибок>
     
  17. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    э? может, вдвое меньше?

    вообще, бери мой вариант из начала страницы
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    че ты смеешься) вдруг буфер для first выделен в стеке и с ним граничит адрес возврата?
     
  19. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    тогда надо брать мой последний вариант ))

    зы: я просто катаюсь, во что вылился вроде бы элементарный вопрос )
     
  20. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Great

    Это как понимать? :)