Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > вывод (char*) через printf


Автор: gmx 28.7.2011, 14:42
Привет всем!

Получаю Access Violation при попытке вевести char* значение через print.
При этом, есть еще явное преобразование unsigned int в char* предварительно.

Из-за чего ошибка приозошла в моем приложении?

Код

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

struct Header
{
public:
    char s;
} h;

void main(void)
{
    struct byte
    {
        unsigned b1 : 1;
        unsigned b2 : 1;
        unsigned b3 : 1;
        unsigned b4 : 1;
        unsigned b5 : 1;
        unsigned b6 : 1;
        unsigned b7 : 1;
        unsigned b8 : 1;
    };

    union
    {
        char var;
        struct byte z;
    };
    
    cin >> h.s;
    var = (int)h.s;
    
    printf((char*)z.b1);
}


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

Автор: spyswamp 28.7.2011, 15:17
Потому что ты не почитал документацию про printf(). Твой (char*)z.b1 воспринимается как формат, а следующий по стеку адрес выводится по этому формату. Что там за адрес - одному богу известно. Вот тебе и access violation.

Автор: gmx 28.7.2011, 15:27
Цитата(spyswamp @  28.7.2011,  15:17 Найти цитируемый пост)
Потому что ты не почитал документацию про printf(). Твой (char*)z.b1 воспринимается как формат, а следующий по стеку адрес выводится по этому формату. Что там за адрес - одному богу известно. Вот тебе и access violation. 

Нет! Потому что, просто забыл, что в printf() нужно было юзать всякие константы типа %i и тд , отвык уже после красот std 

Автор: spyswamp 28.7.2011, 16:19
gmx, я тебе про это и написал. Зацени получившийся код.

Автор: gmx 28.7.2011, 18:21
spyswamp, нет, ты написал, что я не прочитал. Ключевая разница в забыл.

Автор: spyswamp 29.7.2011, 09:40
gmx, ты улавливаешь разницу между "почитал" и "пРочитал"? Не удивительно, что ты накосячил в такой простой фигне. smile

Автор: gmx 29.7.2011, 10:56
spyswamp, фанат журнала Cosmo? Это, по-моему ты разницы не улавливаешь, что я именно прочитал.

Автор: bsa 29.7.2011, 11:12
gmx, бегом читать http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++

Автор: gmx 29.7.2011, 11:19
Цитата(bsa @  29.7.2011,  11:12 Найти цитируемый пост)
gmx, бегом читать Ответы на часто задаваемые вопросы

Может кто-нибудь удалит спам, который получился, начиная с индекса [2] - ?
Достаточно оставить первые два сообщения и закрыть тему.

Автор: bsa 29.7.2011, 11:22

M
bsa
Если ответ на вопрос получен, то пометь тему решенной

Автор: gmx 29.7.2011, 11:28
bsa, в теме спама - много, удалить начиная с topic[2] - надо.

Автор: bsa 29.7.2011, 11:33
 smile gmx, я сам принимаю решения, что удалять, а что нет. Пометь тему решенной и прекращай писать сообщения.

Автор: gmx 29.7.2011, 11:44
bsa, ну вот и проблема Рашки - основная  smile местное чиновье работает в стиле "как хочу, так ворочу", ты сам наруешь правила форума, почитай их, ты уже был обязан удалить начиная со второго сообщения

Автор: bsa 29.7.2011, 11:53
 smile Почитай: http://forum.vingrad.ru/index.php?act=boardrules
тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)