Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > double to LPTSTR.


Автор: DFooz 29.10.2010, 22:09
Не подскажете, как сковертировать double в LPTSTR
Искал по интернету, нашёл только такой вариант, но  при запуске проги выдаёт ошибку.
Компилятор Mingw 4.4.1
Код

double    dlbValue = 50.578 
LPTSTR lpvMessage=TEXT("Default message");
sprintf(  lpvMessage, "%f", dblValue );


Автор: 586 29.10.2010, 22:21
Код
double    dlbValue = 50.578;
TCHAR   szBuffer[32]; 
_stprintf( szBuffer, _T("%f"), dblValue );

Автор: DFooz 29.10.2010, 22:38
у меня компилер GCC. Там нет _stprintf и _T

С TCHAR всё нормально проходит
Т.е. я пробую такой код
Код

double    dlbValue = 50.578 
LPTSTR lpvMessage=TEXT("Default message");
sprintf(  lpvMessage, "%f", dblValue );


Автор: 586 29.10.2010, 23:09
Цитата(DFooz @  29.10.2010,  23:38 Найти цитируемый пост)
у меня компилер GCC. Там нет _stprintf и _T

A файл tchar.h в GCC есть? (#include <tchar.h>) Эти функции там описаны.

Либо используй swprintf (только в GCC у функции swprintf другой синтаксис, не как у Visual C++)
http://codepad.org/1xb4occh
Код
wchar_t s[64] = L"Default message";
double x = 55.34;

swprintf(s, 64, L"%f", x);

Автор: DFooz 29.10.2010, 23:48
да, спасибо. tchar.h имеется. Но ничего не помогает=((


c _stprintf( lpvMessage, _T("%f"), dblValue ); также при запуске проги выдаёт ошибку. 
В дебаггере при начаоле отладки показало SIGSEGV Segmentation fault



ошибка на swprintf error: cannot convert 'TCHAR*' to 'wchar_t*' for argument '1' to 'int swprintf(wchar_t*, const wchar_t*, ...)'|
 В swprintf в GCC надо поменять местами 2-ой и 3-ий параметры
Код

LPTSTR lpvMessage=TEXT("235.25");
int main()
{
  double x = 55.34;
  swprintf(lpvMessage, L"%f", 64, x);
}




Автор: 586 30.10.2010, 00:26
Код
#include <stdio.h>
#include <tchar.h>

TCHAR szMessage[64] = TEXT("235.25");
int main()
{
  double x = 55.34;
  _stprintf(lpvMessage, TEXT("%f"), x);
}

Автор: DFooz 30.10.2010, 00:56
также вылетает при запуске. 
C TCHAR все нормально, а LPTSTR вылетает
Это может быть ошибкой компилера?

Автор: 586 30.10.2010, 02:04
Цитата(DFooz @  30.10.2010,  01:56 Найти цитируемый пост)
также вылетает при запуске. 
C TCHAR все нормально, а LPTSTR вылетает

Правильно. И будет вылетать. Нужно выделять определённое количество памяти под строку (в моём примере, это 64 символа).

Автор: DFooz 30.10.2010, 18:00
ааааа, теперь понял. Спасибо.
Код

#include <windows.h>
#include <iostream>
#include <tchar.h>


LPTSTR lpvMessage;
float data=6.0;

int main()
{
// double to LPTSTR
//выделяем память для  lpvMessage
   lpvMessage =new TCHAR[20];
    _stprintf( lpvMessage, _T("%f"), data );
    std::cout <<lpvMessage<<std::endl;

//LPTSTR to double
    data=atof(lpvMessage);
    std::cout <<data<<std::endl;
    delete lpvMessage;
    return 0;
}

Автор: 586 31.10.2010, 19:14
Только, не
Код
delete lpvMessage;

а
Код
delete []lpvMessage;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)