Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
 Аватар для Nikropolb
55 / 55 / 12
Регистрация: 25.06.2012
Сообщений: 285
Записей в блоге: 1

Преобразование const char* в int

14.03.2017, 00:05. Показов 9771. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. В исходниках одного проекта встретил вот такой участок.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct
{
    char*   name;
    int*    location;
    int     defaultvalue;
    int     scantranslate;      
    int     untranslated;       
} default_t;
 
default_t   defaults[] =
{
{"sndserver", (int *) &sndserver_filename, (int) "sndserver"}
};
Код не компилируется ( not a compile time constant ). И что конкретно мы получем в результате? Адрес строки в целочисленном виде?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2017, 00:05
Ответы с готовыми решениями:

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

[BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)'
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> #include<string.h> ...

21
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.03.2017, 00:09
Наверное.
Так это "проект" рабочий вообще?
0
 Аватар для Nikropolb
55 / 55 / 12
Регистрация: 25.06.2012
Сообщений: 285
Записей в блоге: 1
14.03.2017, 00:14  [ТС]
В процессе возрождения... Здесь имеем подобную конструкцию.
0
14.03.2017, 08:36

Не по теме:

defaultvalue - это что? Смотри для чего используется.

0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 09:37
Цитата Сообщение от Nikropolb Посмотреть сообщение
C++
1
{"sndserver", (int *) &sndserver_filename, (int) "sndserver"}
- вот ошибка, 3-й параметр должен быть число, а не строка.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
14.03.2017, 09:44
DemolitionMan, так там число 3-им параметром идет.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.03.2017, 09:56
Интересно, как const char * должно по волшебству переконвертироваться в int? Да ещё и когда в строке лежит не число?
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
14.03.2017, 10:05
GbaLog-, этого я знать не могу. Но вот только такой код:
C++
1
2
3
cout
    << (int)"sdfsdf"
    << endl;
Выводит числа.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.03.2017, 10:34
Цитата Сообщение от Nikropolb Посмотреть сообщение
В процессе возрождения...
Я правильно понимаю, что вам достался старый код, а вы пытаетесь понять, что он должен делать, и стараетесь довести его до ума?
Вообще-то написан бред. Если это ваш собственный бред, вам лучше всего знать, что вы хотели этим сказать.
Если это бред чужого дяди, мой совет - выбросьте его на помойку и пишите все с начала.
Но если вас интересует поведение этого кода с формальной точки зрения, просто из любопытства, то, имхо, ошибка в первом аргументе. Чтобы проверить это, напишите
C++
1
2
3
4
default_t   defaults[] =
{
{&"sndserer", (int *) &sndserver_filename, (int) "sndserver"}
};
Второй и третий аргументы должны обработаться без ошибок. Я, правда, не могу сказать, как именно будет выполнено приведение (int)"sndserver". Будет ли взят адрес или первые sizeof(int) байтов строки. Мои сомнения простительны, ибо я никогда такой экзотикой не пользовался (и не собираюсь, и вам не советую)
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 11:23
Цитата Сообщение от Nishen Посмотреть сообщение
Выводит числа.
- ничего он не выводит: http://cpp.sh/4wkn2.

Добавлено через 3 минуты
Еще, возможно, 3-им параметром он хотел чтобы тут была строка, тогда код, возможно будет такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct
{
    char*   name;
    int*    location;
    char* defaultvalue;
    int     scantranslate;      
    int     untranslated;       
} default_t;
 
default_t   defaults[] =
{
{"sndserver\0", (int *) &sndserver_filename, "sndserver\0", 0, 0}
};
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
14.03.2017, 11:41
DemolitionMan, почему-то не могу открыть ссылку. ERR_CONNECTION_TIMED_OUT браузер пишет. Напишите, пожалуйста, сюда код.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.03.2017, 11:47
Цитата Сообщение от DemolitionMan Посмотреть сообщение
ничего он не выводит
Дык, у вас там код совсем другой. У вас string, а у Nishenи ТС, char-строка.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
он хотел
А я бы гадать не стал. Чего он тут хотел...Но чего бы не хотел - получилась бредятина. И ваша "корректировка" ее только гуще замешала.
Кстати, нули в конце строк совершенно ни к чему. Си++ сам их поставит. Не такой уж он и дурак.

Добавлено через 3 минуты
Цитата Сообщение от Nishen Посмотреть сообщение
не могу открыть ссылку.
У меня один раз получилось, а второй - нет. "Кавалергарда век не долог..." Но там используется не char, а string. Так что к дискуссии этот код отношения не имеет.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
14.03.2017, 11:50
Цитата Сообщение от Байт Посмотреть сообщение
Но там используется не char, а string. Так что к дискуссии этот код отношения не имеет.
Так там из всего кода по существу только эта строка
C++
1
cout << (int)"sdfsdf" << endl;
нужна. Там она даёт ошибку компиляции - не возможности кастануть из const char* в int, но в VS 2015 всё хорошо преобразовалось и вывело число.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.03.2017, 11:57
Цитата Сообщение от Nishen Посмотреть сообщение
Там она даёт ошибку компиляции - не возможности кастануть из const char* в int, но в VS 2015 всё хорошо преобразовалось и вывело число.
В исконно-посконной версии Си K&R, имхо, тоже должен бы съесть. Но некоторые компиляторы (и стандарты) с течением времени стали построже. И в данном случае это можно только приветствовать. Чем больше явного бреда удастся отловить на стадии компиляции, тем легче нам будет жить, не правда ли?
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
14.03.2017, 12:01
Да, так и есть. Я даже представить себе ситуацию не могу, когда может такой код понадобиться. Но было бы здорово, если бы разработчики компиляторов учитывали такие моменты "сообща".
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 12:41
Цитата Сообщение от Nishen Посмотреть сообщение
DemolitionMan, почему-то не могу открыть ссылку. ERR_CONNECTION_TIMED_OUT браузер пишет. Напишите, пожалуйста, сюда код.
- а, ну да, у меня тоже что-то не сразу открылся. Сегодня проблемы там. Что его писать, код же Вы сами написали.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.03.2017, 13:07
Цитата Сообщение от Nishen Посмотреть сообщение
Я даже представить себе ситуацию не могу, когда может такой код понадобиться.
Классический каламбур типизации. Сишный код, шаблонов нет, а сделать поле/аргумент произвольного типа очень хочется. Вот и присваивается этому полю тип int, а потом в этот int кастится даже указатель, даже небо и даже Аллах.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.03.2017, 13:09
Renji, почему тогда не union?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.03.2017, 13:17
Цитата Сообщение от nmcf Посмотреть сообщение
Renji, почему тогда не union?
Может так универсальное поле удобнее копировать с места на место. Может оно выделено исключительно под нужды пользователя и автор библиотеки не знает какие ему типы положить в юнион. Может еще чего. Тут уже в остальной код вникать надо.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.03.2017, 13:22
Цитата Сообщение от Nishen Посмотреть сообщение
Выводит числа.
Инфа 99%, что это не по стандарту.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2017, 13:22
Помогаю со студенческими работами здесь

Invalid conversion from `int' to `const char*'
Здравствуйте.Возникла проблема с типами данных, пытался решить - стало хуже...:wall: Вот сам код: #include &lt;iostream&gt; ...

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Преобразование char* в const wchar_t *
Есть кусок кода, при компиляции выскакивает ошибка о о неудачном преобразовании типов(вышеназванных) int i = 0; std::string line; ...

Невозможно преобразовать параметр из int в const char
Приветствую, помогите пожалуйста исправить следующую ошибку: printf: невозможно преобразовать параметр 1 из &quot;int&quot; в &quot;const...

Char const* str to vector<unsigned int>
Добрый день! На visual studio 2012 не работает код: char const* str{ &quot;1 2 4 12 5123&quot; }; std::istringstream iss{ str }; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru