Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 16:48   #1
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию Проблема при конвертации LPWSTR To int

Здравствуйте уважаемые программисты. При создании одной из программ возникла следующая сложность, но сперва по порядку:
Выделяю массив, для хранения вводимой строки (размер в скобках не имеет значения, он для примера):
Код:
LPWSTR buff = new wchar_t[20]
Далее, в массив заносится некоторое значение (числовое, но, разумеется, в символьной форме):
Код:
GetWindowTextW(hw, buff, 10);
После чего, данная строка должна быть преобразована в значение int, для чего была написана следующая функция:
Код:
int WStrToInt (wchar_t* wStr)
{
  int nInt;
  wscanf (wStr, (L"%d"), nInt);
  return nInt;
}
Наконец, возвращаемое функцией значение сохраняю в переменной CountTasks (типа int, разумеется)
Так вот, проблема в том, что во время работы программы (по нажатию кнопки пытаюсь занести строку в переменную), выскакивает ошибка The variable 'nInt' is being used without being initialized. В чём подвох?
Alexcomeback вне форума Ответить с цитированием
Старый 03.10.2010, 18:50   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
The variable 'nInt' is being used without being initialized
Это не ошибка, а предупреждение, попробуйте написать так:
Код:
int WStrToInt (wchar_t* wStr)
{
  int nInt(0);
  wscanf (wStr, (L"%d"), nInt);
  return nInt;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 03.10.2010, 19:03   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Syuf
wscanf указатель хочет. он передает инт по значению, вот ниче и не инициализируется. твой вариант отработает без варнинга, но упадет прога.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.10.2010, 19:21   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

9999999999999pproger
Я со skanfом вообще не знаком, а Alexcomeback волнует только это предупреждение - вот я его и убрал
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 03.10.2010, 19:48   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Syuf
с такой логикой лучше бросай с/с++. нужно понимать, что ты делаешь, зачем ты это делаешь, и к чему это приводит
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.10.2010, 19:57   #6
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
9999999999999pproger
Я со skanfом вообще не знаком, а Alexcomeback волнует только это предупреждение - вот я его и убрал
За совет спасибо, конечно, но просто убрать предупреждение и я могу, но мне важно не убирать предупреждение из программ, а получать нужные результаты

Изменил старую функцию на:
Код:
int WStrToInt (wchar_t* wStr)
{
  int *nInt;
  wscanf (wStr, (L"%d"), nInt);
  return *nInt;
}
Однако мало что изменилось, предупреждение по прежнему вылетает(( Или Вы имели что-то другое ввиду?
Alexcomeback вне форума Ответить с цитированием
Старый 03.10.2010, 20:00   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Alexcomeback
Код:
int WStrToInt (wchar_t* wStr)
{
  int nInt;
  wscanf (wStr, (L"%d"), &nInt);
  return nInt;
}
купите же себе k&r наконец
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.10.2010, 20:13   #8
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Alexcomeback
Код:
int WStrToInt (wchar_t* wStr)
{
  int nInt;
  wscanf (wStr, (L"%d"), &nInt);
  return nInt;
}
купите же себе k&r наконец
Купил, читаю
А разве приведенный мною код не равносилен Вашему? Ведь я также передаю адрес в качестве параметра для функции wscanf, только объявление несколько иное. Или я что-то плохо понимаю?
Благодарю, предупреждение исчезло, только почему то в CountTasks по прежнему ничего не заносится(( Проверил значение nInt на этапе возвращения его из функции WStrToInt, там страшное число -858993460....(( Продолжаю копаться в проблеме(
Alexcomeback вне форума Ответить с цитированием
Старый 03.10.2010, 22:55   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

_wtoi не в моде?..
p51x вне форума Ответить с цитированием
Старый 03.10.2010, 23:27   #10
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
_wtoi не в моде?..
Ну вот захотелось велосипед собрать, что поделаешь...
Alexcomeback вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с int 13h, ah = 02h. SoundMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.03.2010 14:22
Ошибка при конвертации tools Общие вопросы .NET 1 25.09.2009 21:56
Сделать собственное прерывание при помощи int 23h FARRIAN Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 29.05.2009 16:28
При конвертации данных из Акса2000 в ехель2007 обрезаются строки. Что делать? VVlad69 Microsoft Office Access 0 02.04.2009 14:53
Проблема с Int. Explorer Laidy Windows 2 31.10.2008 11:40