Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Как проверить является ли тип переменной массивом символов?

17.02.2022, 22:23. Показов 4727. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
char ltr[]="symbols";
if(ltr=='тип char[]')cout << "ok";else cout << "no";// ok
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2022, 22:23
Ответы с готовыми решениями:

Как проверить тип переменной?
::Как проверить тип переменой?

Как проверить, что тип T является типом Nullable<T1>?
Как проверить, что тип T является типом Nullable&lt;T1&gt;, где T1 неизвестный тип?

Проверить тип переменной
Здравствуйте. Имею 2 строки: a = 123 if a == int: print (&quot;OK&quot;) Я похоже совсем потерялся в этой жизни. Почему оно не выводит...

41
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
17.02.2022, 22:43
Цитата Сообщение от pgb Посмотреть сообщение
Как проверить является ли тип переменной массивом символов?
Никак.
А зачем?
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,140
17.02.2022, 22:44
Лучший ответ Сообщение было отмечено pgb как решение

Решение

pgb, возможно, как-то и попроще можно. Но, например

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <type_traits>
 
int main()
{
    char ltr[]="symbols";
    
    constexpr bool is_array=std::is_array_v<decltype(ltr)>;
    constexpr bool item_is_char=std::is_same_v<char,std::decay_t<decltype(*ltr)>>;
    static_assert(is_array);
    static_assert(item_is_char);
    
    if(is_array && item_is_char)
    {
        std::cout<<"ok";
    }
 
    return 0;
}
1
Заблокирован
17.02.2022, 22:44
C++
1
if constexpr (is_same<decltype(a), char[N]>)
1
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
17.02.2022, 23:10  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
А зачем?
Я определил свои названия типов, есть функции получения имён этих типов. Для отладки сделал функцию выводящую дамп памяти, указываю переменную и мне выводится содержание ячеек в памяти этой переменной. А когда например мне надо посмотреть строковой массив, то тип не определяется. Поэтому хотелось бы как то распознавать, что это массив символов и делать его дамп памяти.

Алексей1153, jqnut, Спасибо. Потестирую, может получится сделать чего хочется.
0
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
17.02.2022, 23:16
Цитата Сообщение от pgb Посмотреть сообщение
Для отладки сделал функцию выводящую дамп памяти, указываю переменную и мне выводится содержание ячеек в памяти этой переменной. А когда например мне надо посмотреть строковой массив, то тип не определяется. Поэтому хотелось бы как то распознавать, что это массив символов и делать его дамп памяти.
Для этого тип знать не обязательно - достаточно указателя на начало куска памяти и размер этого куска.



Наколхозить себе функцию преобразования - много ума не надо.
C++
1
2
3
4
char* any2hexdump(void* x, size_t size)
{
  // пара строчек говнокода
}
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,140
17.02.2022, 23:20
кстати, да, внутри шаблона больше пригодится с constexpr
Цитата Сообщение от Алексей1153 Посмотреть сообщение
if(is_array && item_is_char)
-->>
C++
1
if constexpr (is_array && item_is_char)
1
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
17.02.2022, 23:39  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
достаточно указателя на начало куска памяти и размер этого куска.
А если подумать?

Это когда известно что за переменная какой тип, размер и прочее. А когда пишешь шаблонную функцию под все типы, тут надо как то определять. Поэтому именно для этого нужно сначала распознать, что это массив символов, посчитать размер и потом сделать уже дамп.
0
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
17.02.2022, 23:44
Цитата Сообщение от pgb Посмотреть сообщение
Это когда известно что за переменная какой тип, размер и прочее. А когда пишешь шаблонную функцию под все типы, тут надо как то определять. Поэтому именно для этого нужно сначала распознать, что это массив символов, посчитать размер и потом сделать уже дамп.
Ну, удачи тебе.
Чтиво на сон грядущий. Рекомендую.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
17.02.2022, 23:48
Цитата Сообщение от pgb Посмотреть сообщение
Это когда известно что за переменная какой тип, размер и прочее. А когда пишешь шаблонную функцию под все типы, тут надо как то определять. Поэтому именно для этого нужно сначала распознать, что это массив символов, посчитать размер и потом сделать уже дамп.
Так перестаньте писать "шаблонную функцию под все типы" - и все проблемы сразу пропадут.

Память - это всегда массив unsigned char. Никакие другие типы никакого значения не имеют. Не надо ничего "распознавать".
0
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
17.02.2022, 23:53
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так перестаньте писать "шаблонную функцию под все типы" - и все проблемы сразу пропадут.
Память - это всегда массив unsigned char. Никакие другие типы никакого значения не имеют. Не надо ничего "распознавать".
Я уже начал думать, что я один тут вменяемый. Хорошо, что ошибся. Нас уже двое.
---------
З.Ы. Надо учредить "кунсткамеру" с подобными вопросами. Туда же отправить вопросы с подсчётом количества десятичных разрядов дробной части числа.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
18.02.2022, 00:05  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так перестаньте писать "шаблонную функцию под все типы" - и все проблемы сразу пропадут.
Память - это всегда массив unsigned char. Никакие другие типы никакого значения не имеют. Не надо ничего "распознавать".
Я делаю для своего удобства. Не нужно будет указывать с какого адреса, какой размер. Просто в коде где хочу узнать состояние той или иной переменной, вызываю dump(var,"переменная var, для комментария") и получаю её тип, размер и дамп памяти.
Цитата Сообщение от Verevkin Посмотреть сообщение
что я один тут вменяемый
Это очень сомнительно..
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
18.02.2022, 01:25  [ТС]
готово
Миниатюры
Как проверить является ли тип переменной массивом символов?  
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
18.02.2022, 01:32
pgb, т.е. задача была просто завершающий ноль в дамп не выводить?
И мы намеренно игнорируем, например, вот такое данные?
C++
1
i::dump("test\0string", "???");
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
18.02.2022, 01:49
Цитата Сообщение от pgb Посмотреть сообщение
Я делаю для своего удобства. Не нужно будет указывать с какого адреса, какой размер. Просто в коде где хочу узнать состояние той или иной переменной, вызываю dump(var,"переменная var, для комментария") и получаю её тип, размер и дамп памяти.
И как это связано с вопросом, вынесенным в заголовок: "Как проверить является ли тип переменной массивом символов?"

Если я хочу получить дамп памяти, занимаемой переменной типа double, зачем мне знать, является ли тип double массивом символов или нет?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
18.02.2022, 02:00
Verevkin, ты первый пост что ли от этого персонажа встретил? Он тут стабильно каждый день выкатывает пост на тему "как превратить сишечку в динамически типизируемый язык? Может каким-то классом? Может шаблончиком? Может каким-нибудь any? Ну просто для удобства же! Вы никогда не задумывались как неудобно постоянно объявлять типы?"
0
Заблокирован
18.02.2022, 07:57
Цитата Сообщение от Verevkin Посмотреть сообщение
char* any2hexdump(void* x, size_t size)
std::string сдампит?

Добавлено через 10 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так перестаньте писать "шаблонную функцию под все типы" - и все проблемы сразу пропадут.
Появятся другие.
C++
1
2
3
4
5
template<typename T> auto f(auto&&... xs) {
  auto result{xs...};  // либо что-то более сложное
  std::cout << result << '\n';
  return result;
}
Без operator<< "под все типы" всё ломается. ТС просто на суть проблемы не вышел. Точнее, у него нет проблемы вида "зачем знать тип объекта и зачем нужны полиморфные реализации".

Добавлено через 29 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Он тут стабильно каждый день выкатывает пост на тему "как превратить сишечку в динамически типизируемый язык?
Понятия не имею, что он там выкатывает, но данный вопрос относится как раз к статической типизации. Какой-то динамики здесь нет.
0
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
18.02.2022, 08:26
Цитата Сообщение от pgb Посмотреть сообщение
Это очень сомнительно..
Сомнение - вещь сугубо субъективная.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Verevkin, ты первый пост что ли от этого персонажа встретил? Он тут стабильно каждый день выкатывает пост на тему "как превратить сишечку в динамически типизируемый язык?
ХЗ, возможно, не обращал внимания.
Цитата Сообщение от jqnut Посмотреть сообщение
std::string сдампит?
Что ты имеешь в виду? Это ж класс, как передашь в функцию, так и получишь результат. Для функции без разницы, что преобразовывать, она читает байты по указателю и инкрементирует его, пока не прочитает заданное количество байт. Она оперирует только типом uint8_t*.
0
Заблокирован
18.02.2022, 08:40
Цитата Сообщение от Verevkin Посмотреть сообщение
Что ты имеешь в виду?
Я имею ввиду, что значение строки таким образом не получить. Это к вопросу о том, зачем нужно знать тип.
0
Злостный нарушитель
 Аватар для Verevkin
10643 / 5794 / 1279
Регистрация: 12.03.2015
Сообщений: 26,744
18.02.2022, 08:48
Цитата Сообщение от jqnut Посмотреть сообщение
Я имею ввиду, что значение строки таким образом не получить.
Что ты передашь в функцию, с тем она и работает. Если надо сдампить строку, передавай указатель на начало её данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2022, 08:48
Помогаю со студенческими работами здесь

Надо проверить является ли значение переменной целым
10-10 = 1.7....E-15 ??? Please, posmotrite fragment coda. Nado proverit' javljajetsja li zna4enije peremnnoj celym ili net. Ne...

Разработайте пользовательский тип “Многочлен от одной переменной”. Многочлен задается степенью и массивом коэффициентов
Разработайте пользовательский тип “Многочлен от одной переменной”. Многочлен задается степенью и массивом коэффициентов. Для...

Проверить, является ли введенная последовательность символов симметричной
Проверить, является ли введенная последовательность символов симметричной трёмя способами: используя стек, очередь и дек. Помогите...

Рекурсия: проверить, является ли симметричной подпоследовательность символов
Добрый вечер..... У меня возникла проблема, с которой я столкнулся.... Мне нужно написать рекурсивную функцию по такой задачи: Задана...

Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект!
interface HowDefineMyType { void info(); } class A implements HowDefineMyType { public int x;


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru