Странная ошибка с AnsiString и TSTringList

Рейтинг: 0Ответов: 1Опубликовано: 24.06.2011

Есть у меня следующий код:

    AnsiString str = "194.106.196.100:28960";

    TStringList* ipport = new TStringList;
    ipport->StrictDelimiter = true;
    ipport->Delimiter = ':';
    ipport->DelimitedText = str;

    char *srvip = (ipport->Strings[0]).t_str();
    int srvport = (ipport->Strings[1]).ToInt();

    //Memo1->Lines->Add("Str: " + AnsiString(str));
    Memo1->Lines->Add("IP: " + AnsiString(srvip));
    Memo1->Lines->Add("Port: " + AnsiString(srvport));

    delete ipport;
    ipport = NULL;

Для проверки эти переменные добавляю в мемо, и выходит интересная картина - в мемо у меня пишется:
IP: 194.106.196.10
Port: 28960
А картина интересная потому, что если ip сделать как 194.106.196.1000:28960 или 194.106.196.10:28960, то в мемо покажется ИМЕННО этот IP-шник... Почему так? Уже всю голову сломал. И как сделать, что бы нормально всё таки писалось?

Ответы

▲ 2Принят

Не лениться, а найти позицию ':' и разрезать строку руками старыми добрыми методами.

UPD Странный эффект наверняка связан с короткоживучестью экземпляра строки, возвращаемой из TStringsList для которой вы вызываете t_str. Видимо, она возвращает указатель на строку, а не копию, а потом сразу уничтожается.. в результате указатель ссылается на мусор.