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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
#1

Ошибка в преобразовании типов - C++

04.12.2013, 10:58. Просмотров 252. Ответов 9
Метки нет (Все метки)

Здравствуйте. Я написал программу, которая преобразует int в char через указатель. Программа работает, но криво. Например при вводе числа 222 выводит отрицательное значение, а так быть не должно. Помогите найти ошибку, заранее спасибо )
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    int i, *p;
    cout<<"i="; cin>>i;
    p=&i;
    printf("%d\n", *((char*)p));
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 10:58     Ошибка в преобразовании типов
Посмотрите здесь:

Из-за чего появилась ошибка "сбой при преобразовании в COFF"? C++
Почему конструктор вызывается повторно при преобразовании типов? C++
C++ Ошибка error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
Ошибка в преобразовании строки в double C++
C++ о преобразовании типов C++
Ошибка Error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден C++
Ошибка с комплексными числами при дискретном преобразовании Фурье C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:03     Ошибка в преобразовании типов #2
Приведение указателей - не есть преобразование типов.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:06  [ТС]     Ошибка в преобразовании типов #3
Возможно я не правильно выразился, мне нужно "Преобразовать указатель одного типа в указатель другого". В данном случае указатель типа int в char. )
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:16     Ошибка в преобразовании типов #4
int выводится как char:
C++
1
2
3
4
int i, *p;
cout<<"i="; cin>>i;
p=&i;
printf("%c\n", *p);
Добавлено через 9 минут
Цитата Сообщение от Guyver Посмотреть сообщение
а так быть не должно
Если char знаковый, то должно.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:18  [ТС]     Ошибка в преобразовании типов #5
Все равно не понимаю, задание "Преобразовать указатель одного типа в указатель другого", преподаватель зачел первый раз этот код, сказал все правильно. Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный)
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
04.12.2013, 11:22     Ошибка в преобразовании типов #6
unsigned char
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:28     Ошибка в преобразовании типов #7
Преобразовывается очень просто, просто приводится. А то что выводит отрицательрое число, при int больше 127, то зависит от реализации char (может быть знаковым, может беззнаковым). Если char знаковый, то, если введено 222 (11011110), указатель будет указывать на старший байт, старший бит - знак, поэтому выводится отрицательное число. Если хотите, чтобы выводило только положительные, то приводите к unsigned char*.
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:29  [ТС]     Ошибка в преобразовании типов #8
Всем большое спасибо, наконец-то понял, что к чему )
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:42     Ошибка в преобразовании типов #9
Цитата Сообщение от alsav22 Посмотреть сообщение
указатель будет указывать на старший байт
На младший байт int (в памяти он будет первым, архитектура x86).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 11:46     Ошибка в преобразовании типов
Еще ссылки по теме:

Ошибка этапа исполнения при преобразовании символов в верхний регистр C++
Ошибка "Сбой при преобразовании в COFF: файл недопустим или поврежден" C++
C++ В функции GetRandChar ошибка в преобразовании char в wchar_t
Странное поведение при преобразовании типов C++
C++ Ошибка при преобразовании int в fpos_t

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2910 / 1238 / 78
Регистрация: 27.05.2008
Сообщений: 3,321
04.12.2013, 11:46     Ошибка в преобразовании типов #10
Цитата Сообщение от Guyver Посмотреть сообщение
Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный
Преподаватель такой преподаватель :-) Про signed char и unsigned char никогда ничего не слышал.
Yandex
Объявления
04.12.2013, 11:46     Ошибка в преобразовании типов
Ответ Создать тему
Опции темы

Текущее время: 20:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru