Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 00:20   #21
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Очередной "прикол": выставил char Program_name[10];

пишу в Program_name -
PHP код:
strcpy (Programs.Program_nameEdit1->Text.c_str()); 
читаю -
PHP код:
Edit2->Text=AnsiString(Programs.Program_name); 

Так вот записывается и читается строка любой длины хоть 10, хоть 20 символов, выставляю char Program_name[1]; - без разницы, пишется и читается безразмерная строка, вероятно перекрывая и искажая другие данные структуры. Предполагаю, что дело в том что Programs.Program_name по сути не переменная, а указатель на начало массива символов... Как сделать так, чтобы размер строки учитывался и ничего лишнего не писалось-читалось?
Vlad9999 вне форума Ответить с цитированием
Старый 15.01.2013, 00:37   #22
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
пишется и читается безразмерная строка, вероятно перекрывая и искажая другие данные структуры
Так и есть.Значит, надо бы самостоятельно следить за длиной строки (например задавая ее в strcpy_s). Либо отказаться от фиксированной длины и использовать динамическую строку.
Или вот:
Почему это класс Edit имеет такую фишку как Text, а Ваша структура не может себе этого позволить?
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 00:47   #23
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Динамические строки, конструкторы это пока не поддается моему пониманию. Да и хочется пока обходится как можно более простыми средствами. На данном этапе задача - ввод данных в структуру с последующим сохранением в файл, чтение структуры из файла...И все вроде получается, только с самыми малозначащими (в плане реализации логического алгоритма) строками - полная засада.
Vlad9999 вне форума Ответить с цитированием
Старый 15.01.2013, 00:54   #24
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Вас успокоит, что на эти грабли за последние сто лет наступала уже тьма народа?
И окончательно задолбавшись с этим, люди придумали класс строка.
Код:
#include <string> 
struct MYSTR
{
	int somevalue;
	std::string S;
};

...

MYSTR ms;
ms.S = "qwerty";
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 01:02   #25
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Так просто? А длину строки можно как-то регулировать?
Vlad9999 вне форума Ответить с цитированием
Старый 15.01.2013, 01:07   #26
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
А длину строки можно как-то регулировать?
Класс самостоятельно следит за корректной длиной. Внутри строки конечно же есть указатель, где хранятся реальные данные. Но доступ к ним только через разрешенные методы класса.
PS. Кроме того <string> - это стандарт.

Последний раз редактировалось EUGY; 15.01.2013 в 01:10.
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 01:36   #27
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

То есть написав вот так:

PHP код:
struct Record
{
bool aktiv;
int check_period;
bool port[10];
std::string Program_name;
int day;
int mes;
int ned;
int imp_on;
int imp_off;
TDateTime start;
TDateTime stop;
}
Programs
можно будет
PHP код:
Programs.Program_name=Edit1->Text.c_str(); 
только как преобразовать теперь string в AnsiString?
PHP код:
Edit2->Text=AnsiString(Programs.Program_name); 
и
PHP код:
Edit2->Text=Programs.Program_name
не работает.

Последний раз редактировалось Vlad9999; 15.01.2013 в 09:24.
Vlad9999 вне форума Ответить с цитированием
Старый 15.01.2013, 01:42   #28
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

std::string Program_name[20]; - Зачем двадцать экземпляров? Строка одна.
Код:
struct Record 
{ 
....
std::string Program_name; 
...
};

Edit2->Text = Programs.Program_name;
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 09:29   #29
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Прошу прощения, опечатался, исправил,

PHP код:
Edit2->Text=AnsiString(Programs.Program_name); 
PHP код:
Edit2->Text=Programs.Program_name
Все равно не работают.
Vlad9999 вне форума Ответить с цитированием
Старый 15.01.2013, 10:41   #30
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

А вообще существует оператор приведения из std::string в AnsiString? Попробуй

Код:
Edit2->Text=AnsiString(Programs.Program_name.c_str());
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в структурах[C++] druger Помощь студентам 0 22.03.2012 19:07
не совсем понял пример в методичке о структурах (С++) severest Общие вопросы C/C++ 1 18.04.2011 20:01
Работа с файлами в структурах ХреновыйПрогер Общие вопросы C/C++ 5 23.12.2010 21:46
Массивы и структуры в структурах (Задача в С++) bel_ka Общие вопросы C/C++ 4 16.12.2007 15:31