Вот такой кусок кода. Sockets - массив сокетов на сервере.
Цитата:
len:=recv(sockets[b],buf,size_buf,0);
s1:=Pchar(@buf);
s:=copy(s1,1,len); или leftstr(s1,len); (пробовал оба варианта)
|
Строка читается из сокета. Читается нормально - при отладке я вижу, что в s1 прочитано, то что отправлено клиентом. Дальше я обрезаю строку до нужной длины и вот здесь начинается веселье.
Если len до 490 (или около того, 484 символа проходят, 490 - нет) - великолепно работают и leftstr и copy и дальше я спокойно с полученной строкой делаю что хочу.
Если больше 490 но меньше 1000 - работает copy, но leftstr вылетает с Access violation. А после обработки строки, полученной через copy, вылетает pos('\', s) с Access violation.
Если len больше 1000 - ошибку выдает и copy и leftstr. У меня есть подозрение, что это как-то связано с PChar и динамическими строками, но ничего путнего я пока не нашел.
PS. К сожалению код не мой - мне его приходится доделывать.