Форум программистов, компьютерный форум CyberForum.ru

vwprintf, va_list (stdarg.h) и большие числа (больше 4х байт) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Убрать символ в коде http://www.cyberforum.ru/cpp-beginners/thread1064483.html
#include <fstream> main(int a){ std::fstream i("input.txt"),o("output.txt", 2); i>>a; o<< 99*a+99; } Размер кода: 90
C++ Обьясните код обьясните код #include <ios> main() { system("for /f \"tokens=1,2\" %a in (input.txt) do set /a %a+%b >output.txt"); } http://www.cyberforum.ru/cpp-beginners/thread1064474.html
C++ Работа с файлами
Есть следующее задание. Написать программу, которая выводит строку, набранную на клавиатуре, в текстовый файл. Затем: - считывает текст из файла - находит самое длинное слово и его порядковый номер в тексте. Но проблема в том, что когда я ввожу несколько слов разделенных пробелами, то записывает в файл только первое слово. В чем проблема, и как исправить? #include <iostream> #include...
Почему выдает такую ошибку? c++ при компиляции C++
Вот код программы, нахождение наибольшего числа с 3 заданных #include <iostream> uisng namespace std; int max(int a,int b) { if(a>b) return a; return b;
C++ Странно видёт себя программа http://www.cyberforum.ru/cpp-beginners/thread1064455.html
Написал программу конвертор валют но при выборе валюты программа сразу пишет ответ. #include <iostream> using namespace std; int main(){ setlocale(LC_ALL, "Russian"); //Русский язык int currency; double UAH, USD; UAH=0; USD=0;
C++ Ругается на gets() Добрый вечер, рассматривал функцию gets() Но при компиляции программы выдаёт ошибку warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\disk кирилл\программы\microsoft visual studio\vc\include\stdio.h(277): см. объявление "gets" Программа запускается... подробнее

Показать сообщение отдельно
lanakramoleb
1 / 1 / 0
Регистрация: 18.09.2012
Сообщений: 32
06.01.2014, 20:38     vwprintf, va_list (stdarg.h) и большие числа (больше 4х байт)
Здравствуйте

Вызывается метод:

C++
1
CLog::okf(L"\n\tSector size:\t%u\n\tSectors count:\t%u\n\tDisk size:\t%u", dwSectorSize, qwTotalSectors, qwDiskSize);
C++
1
2
3
4
5
6
7
8
9
10
void CLog::okf(wchar_t * wcszParams, ...)
{
    wcout << L"[OK] ";
    
    va_list argList;
    va_start(argList, wcszParams);
    vwprintf(wcszParams, argList);
    va_end(argList);
    wcout << endl;
}
Важен момент, что dwSectorSize типа DWORD (unsigned long, 4 байта), a qwTotalSectors и qwDiskSize типа QWORD (unsigned long long, 8 байт).

В моей ситуации
dwSectorSize = 512 (0x 00 00 02 00),
qwTotalSectors = 625137345 (0x 00 00 00 00 25 42 D6 C1),
qwDiskSize = 320070320640 (0x 00 00 00 00 4A 85 AD 82 00)

на моменте вызова vprintf в памяти по адресу argList хранится
Код
00 02 00 00 c1 d6 42 25 00 00 00 00 00 82 ad 85 4a 00 00 00
(далее полагаю неинтересным. Неправ?)

как видно все данные в памяти выглядят верно, однако на выводе имеем:

Код
Sector size:	512
Total sectors:	625137345
Disk size:		0
Если же qwTotalSectors = 0x 00 00 00 AA AA AA AA AA (я пробовал так для примера), a qwDiskSize = 1,
то в памяти будет
Код
00 02 00 00 aa aa aa aa aa 00 00 00 01 00 00 00
, а на выводе:

Код
Sector size:	512
Total sectors:	2863311530
Disk size:		170
т.е. 0x AA AA AA AA и 0x 00 00 00 AA соответственно.

Т.е., судя по всему, vprintf берёт агрументы по четыре байта (потому и ноль получился в первый раз и 170 во второй). Как это обойти? Как-то где-то можно указать размеры типов? Или ещё какой-то выход?

Заранее спасибо!

PS: Я сомневаюсь, что я запостил вопрос в правильной ветке форума, однако мне не приходит письмо для подтверждения аккаунта, чтобы писать в более "продвинутые" ветки... почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru