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

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

317  1 2 все
aleksej2k постоялец22.05.06 09:57
aleksej2k
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
NEW 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 
aleksej2k постоялец22.05.06 20:14
aleksej2k
NEW 22.05.06 20:14 
в ответ scorpi_ 22.05.06 19:52
да, я о том что она не правильно настоена тоже думал, потому что часто глупые ошибки выдает. но не знаю как и что настроить. все оставил как было после инсталяции. думаю все доложно быть стандартно.
у меня даже ощибки сообщает при следующем коде:
MessageBox("123456");
что за глупости понять не могу)
#21 
Simple Nothing is f*cked22.05.06 20:35
Simple
NEW 22.05.06 20:35 
в ответ scorpi_ 22.05.06 18:31
Для упрощенного использования с WinAPI, я думаю.
#22 
Murr коренной житель23.05.06 10:25
Murr
NEW 23.05.06 10:25 
в ответ Simple 22.05.06 19:31
Да, я все собираюсь почитать одну книженцию за 18 доллариков... для начинающих... только вот скучная она... совсем скучная...
#23 
JacksonB гость23.05.06 16:19
JacksonB
NEW 23.05.06 16:19 
в ответ aleksej2k 22.05.06 09:57
Если я тебя правильно понял тебе надо CString конвертировать в тип long.
сделай просто
long lResult;
CString ant="123";
lResult=atol(ant);
вс╦ работает.
#24 
Simple Nothing is f*cked23.05.06 16:28
Simple
Simple Nothing is f*cked23.05.06 16:29
Simple
NEW 23.05.06 16:29 
в ответ Murr 23.05.06 10:25
Вот когда почитаешь, тогда и будешь давать советы ;)
#26 
JacksonB гость23.05.06 16:59
JacksonB
NEW 23.05.06 16:59 
в ответ Simple 23.05.06 16:28
не заметил. Был не внимателен.
Но то что я написал действительно работает. :)
#27 
Murr коренной житель23.05.06 20:17
Murr
NEW 23.05.06 20:17 
в ответ Simple 23.05.06 16:29
Ленивый я немеряно (но как-нибудь собурусь)... Да и описана там не мелкомягкая поделка, а самый что ни на есть стандартный вариант...
#28 
aleksej2k постоялец23.05.06 23:07
aleksej2k
NEW 23.05.06 23:07 
в ответ JacksonB 23.05.06 16:19
да, конечно, все доложно работать, но к сажелению я имею восьмую версию, и она не понятно почему дает ошибки, и компилирует по турецки.
но я уже почти 50 процентов от седьмой достал, так что скоро все будет в порядке))
#29 
Simple Nothing is f*cked24.05.06 10:04
Simple
NEW 24.05.06 10:04 
в ответ JacksonB 23.05.06 16:59
Естественно, я тоже проверил перед тем, как написать :)
#30 
  scorpi_ скептик24.05.06 11:43
NEW 24.05.06 11:43 
в ответ aleksej2k 23.05.06 23:07
В ответ на:
но к сажелению я имею восьмую версию, и она не понятно почему дает ошибки, и компилирует по турецки.

Как же достали писатели с кривыми руками сваливающие собственные ошибки на других...
Запомни - пока ты не стал C++ - Гуру в 999999 случаях из миллиона если что-то не работает, то это твоя собственная ошибка. Когда станешь Гуру, количество твоих ошибок уменьшится до 99 из 100, оставшийся один случай - действительно баг.
Вот объясни например, почему ты так и не сказал, в чём заключалось неработание моего примера?
Кстати в данном случае действительно лучше писать long zahl = atol( ant ), так как оператор const char* не производит никаких лишних телодвижений, просто возвращяя внутренний указатель на строку.
I did it my way.
#31 
aleksej2k постоялец24.05.06 14:49
aleksej2k
NEW 24.05.06 14:49 
в ответ scorpi_ 24.05.06 11:43
твой пример я вставил себе в прогу, он мне начел сообщать ошибки и я все выкинул сного.
погляди картинку, и увидеш сам.
#32 
Simple Nothing is f*cked24.05.06 15:24
Simple
NEW 24.05.06 15:24 
в ответ aleksej2k 24.05.06 14:49
Прикольно, а у меня прошло. Правда, на VS 6.0
#33 
  scorpi_ скептик24.05.06 16:33
NEW 24.05.06 16:33 
в ответ aleksej2k 24.05.06 14:49
Ты Unicode используешь? Тогда тебе надо писать так:
long zahl = _wtol( ant );
#34 
aleksej2k постоялец24.05.06 17:26
aleksej2k
NEW 24.05.06 17:26 
в ответ scorpi_ 24.05.06 16:33
я пользую то что MS VS сома выбрала.
да, получается что Unicode стоит, а где это переключается?
спасибо большое за помощ! оставляю восьмую версию на компе!
#35 
  scorpi_ скептик24.05.06 17:32
NEW 24.05.06 17:32 
в ответ aleksej2k 24.05.06 17:26
Project -> Projectname Properties -> Configuration Properties -> General -> Character Set
Но лучше не убирать Unicode, а перевести всю программу на Unicode, чтобы её без проблем использовать с разными языками.
#36 
aleksej2k постоялец24.05.06 17:41
aleksej2k
NEW 24.05.06 17:41 
в ответ scorpi_ 24.05.06 17:32
ок, оставлю, пасибо большое!
#37 
1 2 все