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

Ваш аккаунт

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

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

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

Преобразование CString в char*

8.5K
28 февраля 2007 года
voinDi
44 / / 28.09.2006
В firststeps в примере написан код
 
Код:
CString test;
char * buffer;  // указатель на данные
strcpy(buffer, LPCSTR(test));   // копировать в него данные

В строке копирование компилятор выдает ошибку:
.\MyClip.cpp(33) : error C2440: '<function-style-cast>' : cannot convert from 'CString' to 'LPCSTR'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Как конвертировать?
320
28 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
 
Код:
CString test = "The New String";
    char *buffer = new char[200];  
    strcpy(buffer,test);

Очень странно.Так все должно работать.Только в твоем примере строки
test нет,она ни чему не равна и указатель...!!!:) А поводу конвертации
все должно быть нормально, а какая студия ?
240
28 февраля 2007 года
aks
2.5K / / 14.07.2006
m_Valery, не должно это работать, если CString юникодовая. А проект как раз видимо создан с настройками юникода.
263
28 февраля 2007 года
koltaviy
816 / / 16.12.2004
 
Код:
strcpy(buffer, LPCTSTR(test));

Или вот еще:
 
Код:
#include <atlstr.h>

CString s = "Hallo";
char *buffer;
buffer = s.GetBuffer();
8.5K
28 февраля 2007 года
voinDi
44 / / 28.09.2006
пытаюсь работать в VC++ 2005.
вот весь код функции
Код:
void CMyClip::CopyText(CString test)
{
    if (AfxGetMainWnd()->OpenClipboard())// если буфер обмена удалось открыть то
    {
        if (EmptyClipboard())   // Очистить буфер
        {
            HGLOBAL clipbuffer;
            char * buffer;  // указатель на данные
            clipbuffer = GlobalAlloc(GMEM_DDESHARE, test.GetLength()+1);// выделить память
            buffer = (char*)GlobalLock(clipbuffer); // блокировать буфер
            strcpy(buffer, LPCSTR(test));   // копировать в него данные
            GlobalUnlock(clipbuffer);   // разблокировать
            SetClipboardData(CF_TEXT,clipbuffer);   // установить данные и тип
            if (!CloseClipboard()) AfxMessageBox("Error Close");// закрыть
        } else AfxMessageBox(TEXT("Error Empty"));
    } else AfxMessageBox(TEXT("Error Open"));
}


видимо да, проект с поддержкой юникода, в firststeps по 6 версии написано, а в 2005 несколько другие названия проектов, а я мучаюсь, в функции передаю строки, используя макросы TEXT, LPCSTR.
а можно исправить проект, чтобы был без юникода, это в свойствах, настройка Character set?
320
28 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
2askДа, у меня юникод не стоит,ты прав:)
2voinDi - да это там.
8.5K
28 февраля 2007 года
voinDi
44 / / 28.09.2006
Спасибо, изменила настройки проекта и использовала функцию GetBuffer
23K
03 марта 2007 года
Seth_a
7 / / 21.02.2007
Посмотри тему проблема (с memcpy?)... там есть рабочий код для помещения строки в буфер для юникода.
возможно не оптимально, но работает.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог