Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

проблема с atol и CString

317  1 2 все
aleksej2k постоялец22.05.06 09:57
aleksej2k
NEW 22.05.06 09:57 
Последний раз изменено 22.05.06 10:01 (aleksej2k)
добрый всем! и заранее спасибо!
CString ant("123");
long zahl=atol((LPCSTR)ant.GetBuffer());
и вот в переменной zahl только число "1" занесено.
есть ли идеи, в чем может быть проблема?
#1 
  digital_pilot авиатор х#ев22.05.06 11:40
NEW 22.05.06 11:40 
в ответ aleksej2k 22.05.06 09:57
хм... а че это за версия? У GetBuffer вроде параметр должен быть...
#2 
aleksej2k постоялец22.05.06 15:26
aleksej2k
NEW 22.05.06 15:26 
в ответ digital_pilot 22.05.06 11:40
у GetBuffer нету параметра.
раньше, помню, работало это без проблем. вот поставил себе новую версию MS VC++ 8.0 - и с тех пор что то не всегда работает.
#3 
  digital_pilot авиатор х#ев22.05.06 15:38
22.05.06 15:38 
в ответ aleksej2k 22.05.06 15:26
а в шестерке параметр есть, и все работает...
#4 
Murr коренной житель22.05.06 15:41
Murr
NEW 22.05.06 15:41 
в ответ aleksej2k 22.05.06 09:57
Попробуй Convert.ToInt32(ant);
P.S. Имена выбирай информативные - самому потом легче будет...
#5 
aleksej2k постоялец22.05.06 15:45
aleksej2k
NEW 22.05.06 15:45 
в ответ Murr 22.05.06 15:41, Последний раз изменено 22.05.06 15:48 (aleksej2k)
у меня прога в c++ без .NET Framework
можно ли его вставить и как? а другие возможности есть?
#6 
aleksej2k постоялец22.05.06 15:47
aleksej2k
NEW 22.05.06 15:47 
в ответ digital_pilot 22.05.06 15:38
срочно иду покупать себе шестую версию))
#7 
Murr коренной житель22.05.06 15:55
Murr
NEW 22.05.06 15:55 
в ответ aleksej2k 22.05.06 15:45
Не знаю. Просто не пробовал делать хоть что-нибудь в .Net без фреймворка - для этого есть 6-я студия.
#8 
aleksej2k постоялец22.05.06 16:12
aleksej2k
NEW 22.05.06 16:12 
в ответ Murr 22.05.06 15:55
читал что проги сдаленнае с .Net можно декомпилировать, изза этого решился в C++ программировать.
кто то знает об этом?
#9 
Murr коренной житель22.05.06 16:18
Murr
NEW 22.05.06 16:18 
в ответ aleksej2k 22.05.06 16:12
Все можно декомпилировать. Только смысл? Я вот создаю порядка 10Мб исходного C#-кода за минуту - декомпилируй на здоровье...
P.S. Еще раз - не компилированной программы, а исходного текста...
#10 
Simple Nothing is f*cked22.05.06 17:25
Simple
NEW 22.05.06 17:25 
в ответ aleksej2k 22.05.06 16:12
Из-за этого явно не стоило.
#11 
Simple Nothing is f*cked22.05.06 17:29
Simple
NEW 22.05.06 17:29 
в ответ aleksej2k 22.05.06 09:57
Зачем такой гемор? Почему не сделать просто atol(ant)?
#12 
Murr коренной житель22.05.06 17:50
Murr
NEW 22.05.06 17:50 
в ответ Simple 22.05.06 17:29
Хммм... atol() требует char* в качестве параметра, а не инстансе CString. Какой-то из методов/свойств должен его возвращать... Так что направление попытки - правильное...
#13 
  scorpi_ скептик22.05.06 18:31
NEW 22.05.06 18:31 
в ответ aleksej2k 22.05.06 15:26
Существуют два варианта GetBuffer http://msdn2.microsoft.com/en-us/library/kt26tkzx(vs.80).aspx - с параметром и без (какой-то "умник" решил совместить две разных операции в одной функции ), первая предназначена для аллокации большего буфера, чтобы туда что-либо записать, и затем сохранить с помощью ReleaseBuffer ( Какой идиот это придумал? )
Так что ищи ошибку у себя, минимизируй проблему до минимальной компилируемой программы.
#14 
aleksej2k постоялец22.05.06 18:57
aleksej2k
NEW 22.05.06 18:57 
в ответ scorpi_ 22.05.06 18:31
В ответ на:
Существуют два варианта GetBuffer http://msdn2.microsoft.com/en-us/library/kt26tkzx(vs.80).aspx - с параметром и без (какой-то "умник" решил совместить две разных операции в одной функции ), первая предназначена для аллокации большего буфера, чтобы туда что-либо записать, и затем сохранить с помощью ReleaseBuffer ( Какой идиот это придумал? )
Так что ищи ошибку у себя, минимизируй проблему до минимальной компилируемой программы.

да, их два есть, оба пробовал, разницы совсем нету, оба выдают тоже самое.
ошибки вобщето не может быть, может только компайлер дурит, вобще с 8 версии он начел ко всякой мелочи придератся, уже жалею что старый диск с седьмой версией выкинул.
#15 
  scorpi_ скептик22.05.06 19:27
NEW 22.05.06 19:27 
в ответ aleksej2k 22.05.06 18:57
В ответ на:
#include <afx.h>
#include <iostream>
int main()
{
CString ant("123");
long zahl = atol( ant.GetBuffer() );
std::cout << zahl << std::endl;
}


Работает хоть в версии 7.1, хоть в 8.0. Так что, как я уже сказал, локализируй проблему, и ищи ошибку у себя.
#16 
Simple Nothing is f*cked22.05.06 19:31
Simple
NEW 22.05.06 19:31 
в ответ Murr 22.05.06 17:50
Найди тему про StdioFile и в ней ссылку на какую-нить книжку по С++ для начинающих.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_m...
#17 
aleksej2k постоялец22.05.06 19:45
aleksej2k
NEW 22.05.06 19:45 
в ответ scorpi_ 22.05.06 19:27
спасибо за помощ, но это у меня тоже не работает.
но смастерил кое что другое что работает:
В ответ на:

CString csZahl("19991230");
long Begin=0;
for(int a=0; a<csZahl.GetLength(); a++){
int zehner=1;
for(int b=0; b<a; b++)zehner*=10;
Begin+=atol((char*)csZahl.Mid(csZahl.GetLength()-a-1).AllocSysString())*zehner;
}

#18 
  scorpi_ скептик22.05.06 19:52
NEW 22.05.06 19:52 
в ответ aleksej2k 22.05.06 19:45
Фигнёй не занимайся, и не прыгай с бубном. Если мой пример не работает, значит у тебя студия неправильно установлена/отконфигурирована. Значит надо переустанавливать, или искать ошибку в данном направлении. А то это неизвестно где и когда ещё вылезет.
#19 
  scorpi_ скептик22.05.06 20:03
NEW 22.05.06 20:03 
в ответ aleksej2k 22.05.06 19:45
И вообще, что значит не работает?
Ты сделал новый чистый проект, скопировал туда мой пример, скомпилировал, запустил, и получил 1?
#20 
1 2 все