Мне нужно перевести часть кода C в код Delphi/Pascal, однако я не могу понять пару строк.
Код С:
static char* get_boundary(apr_pool_t* p, const char* ctype) {
char* ret = NULL ;
if ( ctype ) {
char* lctype = lccopy(p, ctype) ;
char* bdy = strstr(lctype, "boundary") ;
if ( bdy ) {
char* ptr = strchr(bdy, '=') ;
if ( ptr ) {
// what is the following line supposed to do?
bdy = (char*) ctype + ( ptr - lctype ) + 1;
// and this? I understand it's a loop, but *ptr and ++ptr is ugly!
for ( ptr = bdy; *ptr; ++ptr )
if ( *ptr == ';' || isspace(*ptr) )
*ptr = 0 ;
ret = apr_pstrdup(p, bdy) ;
}
}
}
return ret ;
}
Мой текущий перевод:
function get_boundary(p: Papr_pool_t; const ctype: PChar): PChar;
var
LCType: PChar;
LBody: PChar;
begin
Result := NIL;
LCType := lccopy(p, ctype);
LBody := strpos(LCType, 'boundary');
if LBody <> NIL then begin
// now what? (:
end; // if LBody <> NIL then begin
end;
lccopy создает копию параметра ctype и переводит его в нижний регистр.
Некоторые детали перевода приветствуются, например, 'bdy = (char*) ctype + ( ptr - lctype ) + 1;' и цикл for.
К вашему сведению, я перевожу mod_upload.c.
string
, а неPChar
. C не имеет строкового объекта. Не позволяйте возможностям C управлять вашим дизайном Delphi. 2.strchr
иstrstr
служат той же цели, что иPos
в Delphi. - person David Heffernan   schedule 06.02.2012