55 / 55 / 12
Регистрация: 25.06.2012
Сообщений: 285
Записей в блоге: 1
1

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

14.03.2017, 00:05. Показов 5913. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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: ?...

[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>...

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

21
7077 / 6082 / 2770
Регистрация: 14.04.2014
Сообщений: 26,134
14.03.2017, 00:09 2
Наверное.
Так это "проект" рабочий вообще?
0
55 / 55 / 12
Регистрация: 25.06.2012
Сообщений: 285
Записей в блоге: 1
14.03.2017, 00:14  [ТС] 3
В процессе возрождения... Здесь имеем подобную конструкцию.
0
nmcf
14.03.2017, 08:36
  #4

Не по теме:

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

0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 09:37 5
Цитата Сообщение от Nikropolb Посмотреть сообщение
C++
1
{"sndserver", (int *) &sndserver_filename, (int) "sndserver"}
- вот ошибка, 3-й параметр должен быть число, а не строка.
0
1032 / 713 / 317
Регистрация: 26.02.2015
Сообщений: 3,244
14.03.2017, 09:44 6
DemolitionMan, так там число 3-им параметром идет.
0
Любитель чаепитий
3627 / 1714 / 532
Регистрация: 24.08.2014
Сообщений: 5,795
Записей в блоге: 1
14.03.2017, 09:56 7
Интересно, как const char * должно по волшебству переконвертироваться в int? Да ещё и когда в строке лежит не число?
0
1032 / 713 / 317
Регистрация: 26.02.2015
Сообщений: 3,244
14.03.2017, 10:05 8
GbaLog-, этого я знать не могу. Но вот только такой код:
C++
1
2
3
cout
    << (int)"sdfsdf"
    << endl;
Выводит числа.
0
Нарушитель
Эксперт C
26225 / 16254 / 3524
Регистрация: 24.12.2010
Сообщений: 35,871
14.03.2017, 10:34 9
Цитата Сообщение от Nikropolb Посмотреть сообщение
В процессе возрождения...
Я правильно понимаю, что вам достался старый код, а вы пытаетесь понять, что он должен делать, и стараетесь довести его до ума?
Вообще-то написан бред. Если это ваш собственный бред, вам лучше всего знать, что вы хотели этим сказать.
Если это бред чужого дяди, мой совет - выбросьте его на помойку и пишите все с начала.
Но если вас интересует поведение этого кода с формальной точки зрения, просто из любопытства, то, имхо, ошибка в первом аргументе. Чтобы проверить это, напишите
C++
1
2
3
4
default_t   defaults[] =
{
{&"sndserer", (int *) &sndserver_filename, (int) "sndserver"}
};
Второй и третий аргументы должны обработаться без ошибок. Я, правда, не могу сказать, как именно будет выполнено приведение (int)"sndserver". Будет ли взят адрес или первые sizeof(int) байтов строки. Мои сомнения простительны, ибо я никогда такой экзотикой не пользовался (и не собираюсь, и вам не советую)
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 11:23 10
Цитата Сообщение от 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
1032 / 713 / 317
Регистрация: 26.02.2015
Сообщений: 3,244
14.03.2017, 11:41 11
DemolitionMan, почему-то не могу открыть ссылку. ERR_CONNECTION_TIMED_OUT браузер пишет. Напишите, пожалуйста, сюда код.
0
Нарушитель
Эксперт C
26225 / 16254 / 3524
Регистрация: 24.12.2010
Сообщений: 35,871
14.03.2017, 11:47 12
Цитата Сообщение от DemolitionMan Посмотреть сообщение
ничего он не выводит
Дык, у вас там код совсем другой. У вас string, а у Nishenи ТС, char-строка.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
он хотел
А я бы гадать не стал. Чего он тут хотел...Но чего бы не хотел - получилась бредятина. И ваша "корректировка" ее только гуще замешала.
Кстати, нули в конце строк совершенно ни к чему. Си++ сам их поставит. Не такой уж он и дурак.

Добавлено через 3 минуты
Цитата Сообщение от Nishen Посмотреть сообщение
не могу открыть ссылку.
У меня один раз получилось, а второй - нет. "Кавалергарда век не долог..." Но там используется не char, а string. Так что к дискуссии этот код отношения не имеет.
0
1032 / 713 / 317
Регистрация: 26.02.2015
Сообщений: 3,244
14.03.2017, 11:50 13
Цитата Сообщение от Байт Посмотреть сообщение
Но там используется не char, а string. Так что к дискуссии этот код отношения не имеет.
Так там из всего кода по существу только эта строка
C++
1
cout << (int)"sdfsdf" << endl;
нужна. Там она даёт ошибку компиляции - не возможности кастануть из const char* в int, но в VS 2015 всё хорошо преобразовалось и вывело число.
0
Нарушитель
Эксперт C
26225 / 16254 / 3524
Регистрация: 24.12.2010
Сообщений: 35,871
14.03.2017, 11:57 14
Цитата Сообщение от Nishen Посмотреть сообщение
Там она даёт ошибку компиляции - не возможности кастануть из const char* в int, но в VS 2015 всё хорошо преобразовалось и вывело число.
В исконно-посконной версии Си K&R, имхо, тоже должен бы съесть. Но некоторые компиляторы (и стандарты) с течением времени стали построже. И в данном случае это можно только приветствовать. Чем больше явного бреда удастся отловить на стадии компиляции, тем легче нам будет жить, не правда ли?
0
1032 / 713 / 317
Регистрация: 26.02.2015
Сообщений: 3,244
14.03.2017, 12:01 15
Да, так и есть. Я даже представить себе ситуацию не могу, когда может такой код понадобиться. Но было бы здорово, если бы разработчики компиляторов учитывали такие моменты "сообща".
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
14.03.2017, 12:41 16
Цитата Сообщение от Nishen Посмотреть сообщение
DemolitionMan, почему-то не могу открыть ссылку. ERR_CONNECTION_TIMED_OUT браузер пишет. Напишите, пожалуйста, сюда код.
- а, ну да, у меня тоже что-то не сразу открылся. Сегодня проблемы там. Что его писать, код же Вы сами написали.
0
2725 / 1888 / 560
Регистрация: 05.06.2014
Сообщений: 5,504
14.03.2017, 13:07 17
Цитата Сообщение от Nishen Посмотреть сообщение
Я даже представить себе ситуацию не могу, когда может такой код понадобиться.
Классический каламбур типизации. Сишный код, шаблонов нет, а сделать поле/аргумент произвольного типа очень хочется. Вот и присваивается этому полю тип int, а потом в этот int кастится даже указатель, даже небо и даже Аллах.
0
7077 / 6082 / 2770
Регистрация: 14.04.2014
Сообщений: 26,134
14.03.2017, 13:09 18
Renji, почему тогда не union?
0
2725 / 1888 / 560
Регистрация: 05.06.2014
Сообщений: 5,504
14.03.2017, 13:17 19
Цитата Сообщение от nmcf Посмотреть сообщение
Renji, почему тогда не union?
Может так универсальное поле удобнее копировать с места на место. Может оно выделено исключительно под нужды пользователя и автор библиотеки не знает какие ему типы положить в юнион. Может еще чего. Тут уже в остальной код вникать надо.
0
Любитель чаепитий
3627 / 1714 / 532
Регистрация: 24.08.2014
Сообщений: 5,795
Записей в блоге: 1
14.03.2017, 13:22 20
Цитата Сообщение от Nishen Посмотреть сообщение
Выводит числа.
Инфа 99%, что это не по стандарту.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2017, 13:22

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

Преобразование char* в const wchar_t *
Есть кусок кода, при компиляции выскакивает ошибка о о неудачном преобразовании...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.