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

Ваш аккаунт

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

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

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

CString в const char*

10K
14 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
что-то неполучается приобразовать

CString str = "123.4";
double x = atof( str );

Компилятор VC2005 если это имеет значение.
63
14 ноября 2006 года
Zorkus
2.6K / / 04.11.2006
Пиши -
char str[] = "123.4";
double x = atof(str);
10K
14 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
ну это кратенький пример, но у меня просто CString переменная связана с элементом CEdit. Это данные из CEdit'а нужно преобразовать в число.
22K
14 ноября 2006 года
TigerCo
5 / / 14.11.2006
[QUOTE=Kalastiuz]
CString str = "123.4";
double x = atof( str );

Компилятор VC2005 если это имеет значение.[/QUOTE]
Не знаю как на VC2005, а на VC2003 это можно записать и так (но вроде без разницы):
 
Код:
CString str = "123.4";
double x = atof((const char*)str.GetString());

т.е. через "GetString()" получаем указатель на строку, а для полной уверености добавляем "(const char*)".
Удачи!
398
14 ноября 2006 года
Alexandoros
630 / / 21.10.2005
[QUOTE=Kalastiuz]что-то неполучается приобразовать

CString str = "123.4";
double x = atof( str );

Компилятор VC2005 если это имеет значение.[/QUOTE]
Вреш ведь. Прекрасно оно компилится в 2005 студии.
22K
14 ноября 2006 года
TigerCo
5 / / 14.11.2006
[QUOTE=Alexandoros]Вреш ведь. Прекрасно оно компилится в 2005 студии.[/QUOTE]
Я с тобой солидарен.
Вопрос может возникнуть в случае описания как указателя:
 
Код:
CString *str

Вот тут могут быть проблемы.

to Kalastiuz: Проверь как у тебя описана переменная "str". Может по коду идет описание второй одноименной переменной. И кроме того, было бы приятно услашать как именно ругается VC.
10K
15 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
[QUOTE=Alexandoros]Вреш ведь. Прекрасно оно компилится в 2005 студии.[/QUOTE]
чесс слово..!!!

 
Код:
CString str("123.4");
double x = atof((const char*)str.GetString());


Вот так получается. но только если определять как str("123.4")
через str = "123.4"; тоже не получается...
Возникает вопрос как мне тогда обратно преобразовать в double? =)

мне тоже вот говорят, что должно работать... я не зря компилятор привел.. может в настройках что-то где-то.... как например Warning level можно выставлять.

в общем проблема есть
10K
15 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
[QUOTE=TigerCo]to Kalastiuz: Проверь как у тебя описана переменная "str". Может по коду идет описание второй одноименной переменной. И кроме того, было бы приятно услашать как именно ругается VC.[/QUOTE]
Дома инета нет.. но я выпишу как ругается и обязательно процитирую тут.
398
15 ноября 2006 года
Alexandoros
630 / / 21.10.2005
Я уже знаю как - CString : undeclared identifier
10K
15 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
нет.. че-то там.. cannot convert from CString to const char*
приложение на основе диалогового окна
4.1K
15 ноября 2006 года
GRIENDERS
117 / / 06.06.2006
[QUOTE=Kalastiuz]нет.. че-то там.. cannot convert from CString to const char*
приложение на основе диалогового окна[/QUOTE]
А попробуй вот так
 
Код:
CString s;
s.c_str();
10K
15 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
Так ругается:
Код:
------ Build started: Project: itof_test, Configuration: Debug Win32 ------
Compiling...
stdafx.cpp
Compiling...
itof_test.cpp
itof_testDlg.cpp
d:\atof_test\atof_testdlg.cpp(157) : error C2664: 'atof' : cannot convert parameter 1 from 'CString' to 'const char *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Generating Code...
Build log was saved at "file://d:\atof_test\Debug\BuildLog.htm"
itof_test - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Далоговое окно с одним CEdit'ом и одной кнопкой. С CEdit'ом связана переменная m_strEdit.
Обработка нажатия:
 
Код:
void Catof_testDlg::OnBnClickedButton1()
{
      double d = atof(m_strEdit);
}
10K
16 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
[QUOTE=GRIENDERS]А попробуй вот так
 
Код:
CString s;
s.c_str();
[/QUOTE]
А это вроде метод std::string а не CString
10K
16 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
Может где-то что-то в параметрах у меня не так?
Компилятора, линковщика.. ну я незнаю еще че может быть)
10K
16 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
Попробую подойти к проблеме с другой стороны.. Посредством чего можно преобразовывать из CString в double и обратно не используя atof() ?
3
16 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Kalastiuz]Попробую подойти к проблеме с другой стороны.. Посредством чего можно преобразовывать из CString в double и обратно не используя atof() ?[/QUOTE]
По средством lexical_cast. См. boost.org
10K
16 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
Мне бы в MFC.
Да вроде простой пример.. читает числовые данные из CEdit'а и переводит в double
неужели все так запутано? ))
398
17 ноября 2006 года
Alexandoros
630 / / 21.10.2005
у бля, юзай _tstof
10K
17 ноября 2006 года
Kalastiuz
21 / / 14.07.2005
В общем сам разобрался... нашару вообще .. все работает теперь.
в общем при создании проекта..нужно снимать галку Use Unicode Libraries
или же потом
Project -> xxx Properties (Alt+F7) -> Manifest Tool -> General -> Use UNICODE Response Files
нужно установить в No

Всем спасибо за всеразличные советы

[QUOTE=Alexandoros]у бля, юзай _tstof[/QUOTE]
попробую) спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог