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

Странный sprintf - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить есть ли во взвешенном графе цикл отрицательного веса http://www.cyberforum.ru/cpp-beginners/thread1782581.html
(Время: 1 сек. Память: 16 Мб Сложность: 46%) Дан взвешенный граф. Определить, есть ли в нем цикл отрицательного веса. Входные данные Во входном файле INPUT.TXT в первой строке записано число N (1 <= N <= 100) - количество вершин графа. В следующих N строках находится по N чисел - матрица смежности графа. Веса ребер не превышают по модулю 10000. Если ребра нет, соответствующее значение...
C++ Посчитать длины кратчайших путей ориентированного графа есть задача : задача №138 Алгоритм Форда-Беллмана (Время: 1 сек. Память: 16 Мб Сложность: 38%) Дан ориентированный граф, в котором могут быть кратные ребра и петли. Каждое ребро имеет вес, выражающийся целым числом (возможно, отрицательным). Гарантируется, что циклы отрицательного веса отсутствуют. Требуется посчитать длины кратчайших путей от вершины номер 1 до всех остальных вершин. ... http://www.cyberforum.ru/cpp-beginners/thread1782578.html
C++ Необходим материал для чтения и практики
Всем доброго! Я почитал немало книг, перелопатил сайтов с практикой и видео по С++. Наступил какой-то период когда читай либо беру слишком сложно либо наоборот все понятно, да и практические только такие материалы попадаются. Не хочу останавливаться и идти по горизонтали, поэтому и обращаюсь и за лекционными материалами и за практическими указаниями. Все азы как бы уже поняты и в ООП, изучил и...
C++ Compair deque
есть два списка. Теперь мне нужно сравнить элементы если х <у то return (x+y) . я так думаю надо результат в 3 список записать как мне провести сравнение?? желательно с применением функциональных объектов deque<float>X; deque<float>Y; for (int i = 0; i < 7; ++i) X.push_back(i+(rand() % 25)); for (int i = 0; i < 7; ++i) Y.push_back(i + (rand() % 67)); copy(X.begin(), X.end(),...
C++ Передать значение из функции main в другую функцию http://www.cyberforum.ru/cpp-beginners/thread1782500.html
int Func(){ int a, b=10; int c=a+b; return c; } int main(){ int a=5; return 0;
C++ Как объявить friend функцию класса как это оформить, чтобы работало // ----------> one.h #include "two.h" #ifndef ONE_H_INCLUDED #define ONE_H_INCLUDED #include <iostream> class A { int s; подробнее

Показать сообщение отдельно
jr_
8 / 8 / 2
Регистрация: 14.06.2016
Сообщений: 76
Завершенные тесты: 3
19.07.2016, 09:34     Странный sprintf
Структура, ее получение и вывод:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
struct User {
    int unk1;
    int unk2;
    int UserType;
    int unk3;
    int unk4;
    int Id;
    int ObjectId;
    wchar_t Name[48];
    int Race;
    int Sex;
    int ClassId;
    int Lvl;
    __int64 Exp;
    int Str;
    int Dex;
    int Con;
    int Int;
    int Wit;
    int Men;
    int unk5;
    int MaxHp;
    int CurrentHp;
    int MaxMp;
    int CurrentMp;
    int MaxWeight;
    int IsWeaponEquipped;
    int unk6;
    void* unk7[125];
    int Load;
    int Sp;
    int Accuracy;
    int Critical;
    int PAttack;
    int AttackSpeed;
    int Pdef;
    int Evasion;
    int MAttack;
    int MDef;
    int CastSpeed;
    int unk8;
    int unk9;
    int unk10;
    int unk11[14];
    int ClanId;
};
 
//...
 
    std::string UserInfo(User *user) {
        char buf[10000];
        const char *format = "\
                       unk1 %d\n\
                       unk2 %d\n\
                       usertype %d\n\
                       unk3 %d\n\
                       unk4 %d\n\
                       id %d\n\
                       objectid %d\n\
                       name %s\n\
                       race  %d\n\
                       sex %d\n\
                       classid %d\n\
                       lvl %d\n\
                       exp %d\n\
                       str %d\n\
                       dex %d\n\
                       con %d\n\
                       int %d\n\
                       wit %d\n\
                       men %d\n\
                       unk5 %d\n\
                       maxhp %d\n\
                       curhp %d\n\
                       maxmp %d\n\
                       curmp %d\
            ";
 
        sprintf(
            buf,
            format,
            user->unk1,
            user->unk2,
            user->UserType,
            user->unk3,
            user->unk4,
            user->Id,
            user->ObjectId,
            user->Name,
            user->Race,
            user->Sex,
            user->ClassId,
            user->Lvl,
            user->Exp,
            user->Str,
            user->Dex,
            user->Con,
            user->Int,
            user->Wit,
            user->Men,
            user->unk5,
            user->MaxHp,
            user->CurrentHp,
            user->MaxMp,
            user->CurrentMp
            );
 
        return std::string(buf);
    }
 
 
//...
 
void Utils::Log(std::string s1) {
    std::ofstream outfile;
 
    outfile.open("c:\\test.txt", std::ios_base::app);
    outfile << s1 << "\n--\n";
}
 
//...
 
User *user = GetNearestCreature(1, -1);
Utils::Log(UserInfo(user));
Вывод

unk1 0
unk2 0
usertype 0
unk3 0
unk4 0
id 0
objectid 1295068941
name Q
race 1
sex 1
classid 103
lvl 85
exp 3
str 16
dex 24
con 29
int 40
wit 29
men 30
unk5 0
maxhp 5758
curhp 5758
maxmp 4782
curmp 4782



Теперь, меняю спецификатор для поля __int64 Exp с %d на правильный %I64d -> exp %I64d\n\


и снова вывод

Кликните здесь для просмотра всего текста

unk1 0
unk2 0
usertype 0
unk3 0
unk4 0
id 0
objectid 1295068941
name Q
race 1
sex 1
classid 103
lvl 85
exp 68719476739
str 24 <-- почему поплыло?
dex 29
con 40
int 29
wit 30
men 0
unk5 5758
maxhp 5758
curhp 4782
maxmp 4782
curmp 98288


Удаление из строки формата отдельных переменных приводят к такому же результату.
Дамп этого куска памяти показывает что всё в норме.
Что за уличная магия?

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