ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Массив стрктур, Listbox и другое C++
  #1  
Старый 12.06.2009, 19:19
fire64
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
Провел на форуме:
1059196

Репутация: 39
По умолчанию Массив стрктур, Listbox и другое C++

Помогите пожалуйста разобраться с массивом структур

точнее с моим кодом

при нажатии на кнопку должен появиться меседжбокс с именем выбранного сервера, но появляется всегда с именем сервера который находится на самом верху

PHP код:
struct serverinfo 
{
    
char *name;
    
short int port;
    
char *ipadres;
}; 
PHP код:
serverinfo *ServerInfo
PHP код:
void test()
{

    
ServerInfo = new serverinfo[100];

    for( 
int servers 0>= 6-= 6+= )
    {

        
ServerInfo[servers].ipadres ipadres;
        
ServerInfo[servers].port port;
        
ServerInfo[servers].name firsthdr->name;
        
m_serverlist.AddStringServerInfo[servers].name );
        
servers++;
    }




PHP код:
void CGuiSteamListDlg::OnButton2() 
{
    
UpdateDataTRUE );

    
int idx m_serverlist.GetCurSel();

    
AfxMessageBox(ServerInfo[idx].name);


Последний раз редактировалось fire64; 12.06.2009 в 19:23..
 
Ответить с цитированием

  #2  
Старый 13.06.2009, 03:13
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

ну во первых в строках ServerInfo[servers].ipadres = ipadres; ты в цикле всем задаешь указатель на одну строку. но если допустить, что это просто набросок, то.

int idx = m_serverlist.GetCurSel();

AfxMessageBox(ServerInfo[idx].name);

ты получаешь индекс в листбоксе. во первых, я не уверен что порядок добавления верный. нужно использовать InsertString(-1, ...) вместо AddString. Точно не помню, но нужно внимательно посмотреть, какой порядок у записей. ВО вторых for( int servers = 0; n >= 6; n -= 6, p += 6 ) заполнение массива идет с шагом в 6, а в лисбоксе индексы последовательные. Это главный минус смешения структуры данных(твоего массива) с отображением(листбокс). Правильным делать нада по другому. Считываешь строку из листбокса, делаешь функцию поиска в массиве по ключу, передаешь ей считанную строку, ищешь элемент и выводишь. Прямое связывание порядка в двух разныых списках это оооооочень бажно.
 
Ответить с цитированием

  #3  
Старый 13.06.2009, 11:55
fire64
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
Провел на форуме:
1059196

Репутация: 39
По умолчанию

Ra$cal, ок сделал

PHP код:
m_serverlist.InsertString(serversServerInfo[servers].name ); 
теперь список серверов отображается в правильном порядке


да конечно это набросок кода


я сделал

PHP код:
AfxMessageBox(ServerInfo[12].name); 
и пришел к выводу что в не зависимости от индекса ServerInfo всегда возвращает один и тот же результат
 
Ответить с цитированием

  #4  
Старый 13.06.2009, 16:44
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

результат один и тот же потому что ты передаешь указатель. измени структуру на

struct serverinfo
{
char name[100];
short int port;
char ipadres[15];
};

и в цикле заполнения копируй туда строки через strcpy. иначе ты во всех элементах ссылаешься на один и тот же участок памяти. угадай, что это даст при изменении содержимого этого блока памяти =)
 
Ответить с цитированием

  #5  
Старый 13.06.2009, 18:56
fire64
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
Провел на форуме:
1059196

Репутация: 39
По умолчанию

Ra$cal, огромнейшее спасибо

теперь все работает

Последний раз редактировалось fire64; 13.06.2009 в 19:07..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ