Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Объявление строки фиксированной длины

17.07.2018, 09:35. Показов 4572. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct ConfigItem
{
    bool bVisible;
    String Caption[10];
    float val[20];
};
ConfigItem asdf;
 
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
     asdf.Caption = "Сохраняемый заголовок";   // Cannot convert 'AnsiString *' to 'AnsiString'
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Label1->Caption = asdf.Caption;             // Cannot convert 'AnsiString *' to 'AnsiString'
}
Понимаю что строку фиксированной длины легче представить как массив Char, но хотелось бы попробовать класс String.
Как правильно объявить строку фиксированной длины (нужно чтобы в тело структуры писался не указатель,
а содержимое строки).
Как убрать ошибку компиляции "Cannot convert 'AnsiString *' to 'AnsiString'"
Что будет, если я проинициализирую член структуры String Caption[10] строкой, длиннее 10-ти символов?
Допустимы ли в строке постоянной длины пробелы, управляющие символы?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.07.2018, 09:35
Ответы с готовыми решениями:

Строки фиксированной длинны в структурах для записи/чтения в файлах
Всем привет. В С++ я совсем новичок. Создал тему в разделе для начинающих с парой вопросов. На один из них посоветовали попросить помощи в...

Объявление строки
Доброго времени суток. Есть пара свойств класса типа AnsiString: #ifndef DrugH #define DrugH ...

Дополнить определённые строки до фиксированной длины
Задание: Написать сценарий, который будет читать текст из заданного файла и выводить построчно на stdout, добавляя в конец каждой строки...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33412 / 21522 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
17.07.2018, 10:44
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
String Caption[10]
- это не строка из 10 символов, а массив из 10 строк.

См. в сторону SmallString<10> по аналогии с ShortString
2
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
17.07.2018, 11:12  [ТС]
volvo, то есть правильным будет следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct ConfigItem
{
    bool Visible;
    SmallString<10> Caption;
    float Value[20];
};
ConfigItem asdf;
 
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
     asdf.Caption = "Сохраняемый заголовок";
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Label1->Caption = asdf.Caption;
}
Остаётся вопрос, при такой записи в тело структуры попадает не указатель,
а содержимое строки (массив символов с нулём на конце)?
Что будет, если я проинициализирую член структуры SmallString<10> Caption строкой, длиннее 10-ти символов?

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma pack(push, 2)
struct ConfigItem
{
    bool Visible;                   // 1
    SmallString<10> Caption;        // 10
    float Value[20];                // 4*20 = 80
};
#pragma pack(pop, 2)
 
ConfigItem asdf;
 
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
     asdf.Value[0] = 123.45f;
     asdf.Caption = "Сохраняемый заголовок";
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Label1->Caption = asdf.Caption;
    Label2->Caption = FormatFloat("0.00", asdf.Value[0]);
    Label3->Caption = IntToStr(sizeof(ConfigItem));
}
Почему размер структуры 92, а не 91?

Добавлено через 2 минуты
всё, кажется дошло. Большое спасибо
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33412 / 21522 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
17.07.2018, 11:33
Цитата Сообщение от jkrnd Посмотреть сообщение
при такой записи в тело структуры попадает не указатель,
а содержимое строки (массив символов с нулём на конце)?
Да.

Цитата Сообщение от jkrnd Посмотреть сообщение
Что будет, если я проинициализирую член структуры SmallString<10> Caption строкой, длиннее 10-ти символов?
Ничего страшного не будет, там strncpy, лишнее просто отсечется.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2018, 11:33
Помогаю со студенческими работами здесь

Создать класс одномерных масивов содержащих строки фиксированной длины
Очень прошу помочь, так как сам ничего не понимаю. Не смотря на мое желаниие учиться, преподаватели мне попались не очень, а требуют много....

Строку произвольной длины разрезать на несколько строк фиксированной длины
Есть строка большой длины (до 2000 символов) - последние символы в строке ~^, нужно разделить эту строку на несколько строк не более 200...

Есть ли у кого похожий алгоритм: распределения отрезков разной длины внутри отрезков фиксированной длины?
Народ помогите мне с программой распределения отрезков разной длины внутри отрезков фиксированной длины с минимальными остатками. К...

Числовые типы фиксированной длины
Для того, чтобы типы везде имели одинаковый размер, существует uint8_t, uint16_t, uint32_t и uint64_t. Но вот в чем проблема,...

Отличие массива фиксированной длины от указателя
Объясните на примере в чем отличие от *(указателя) когда это массивы?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru