Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
jkrnd
94 / 53 / 11
Регистрация: 22.12.2015
Сообщений: 1,509
#1

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

17.07.2018, 09:35. Просмотров 682. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2018, 09:35
Ответы с готовыми решениями:

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

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

Выравнивание длины строки
Всем привет. Как в C++ Builder дополнить число преобразованное в строку...

Выравнивание строки S по левому краю до длины L
Пожалуйста, помогите решить задачу! На С++ Функция - Left (s,l). Назначение...

прокоментируйте функцию получения длины строки
прочитал такой отрывок на сайте с примером " Для нахождения длины строки,...

3
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25740 / 17294 / 6877
Регистрация: 22.10.2011
Сообщений: 30,520
Записей в блоге: 6
17.07.2018, 10:44 #2
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

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

См. в сторону SmallString<10> по аналогии с ShortString
2
jkrnd
94 / 53 / 11
Регистрация: 22.12.2015
Сообщений: 1,509
17.07.2018, 11:12  [ТС] #3
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
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25740 / 17294 / 6877
Регистрация: 22.10.2011
Сообщений: 30,520
Записей в блоге: 6
17.07.2018, 11:33 #4
Цитата Сообщение от jkrnd Посмотреть сообщение
при такой записи в тело структуры попадает не указатель,
а содержимое строки (массив символов с нулём на конце)?
Да.

Цитата Сообщение от jkrnd Посмотреть сообщение
Что будет, если я проинициализирую член структуры SmallString<10> Caption строкой, длиннее 10-ти символов?
Ничего страшного не будет, там strncpy, лишнее просто отсечется.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2018, 11:33

Авто перенос курсора в Richedit при достижении длины строки определенного числа символов.
Вопрос - как в RichEdit эмулировать нажатие клавиши enter или просто...

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

Пустой StringGrid с фиксированной строкой
Господа, подскажите как можно организовать самый обычный StringGrid, в котором...


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

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

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