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

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

17.07.2018, 09:35. Показов 4485. Ответов 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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru