Модератор: Модераторы
Replicator писал(а):А приведение типа туда-обратно происходит также очень быстро - все что надо, это "забыть" о смещении -4 и добавить в конец (адрес известен) #0, если его там нет (а если, как Вы говорите, там уже есть #0, то и этого не надо).
sacred phoenix писал(а): Я посмотрел на приведение типов в FPC, если использовать приведение к pChar компилятор вставляет дополнительную проверку на содержание нуля в переменной; приведение к pointer этого не дает, т.е. это будет немного оптимальнее.
shade писал(а):PS: Странно, я думал что length(nil) должна работать и возвращать 0... а она оказывается рушиться, помоему это можно считать багом.
sacred phoenix писал(а):В С например можно так:
char s[]="string";
STAKANOV писал(а):length не предназначен для работы с PChar,
shade писал(а):STAKANOV писал(а):length не предназначен для работы с PChar,
Но тем не менее работает, см fpc_pchar_length, который отвечает за legth(p: pchar)
const s:PChar='12346789';
const s_end:PChar='#';
var
ss:LongWord;
begin
ss:=s_end-s;
writeln(ss);
end.
В паскале тоже можно
var s: array [0..8] of char = 'string';
len := sizeof(s);
да и sizeof(s) даст длину с учетом нуль символа (т.е. на 1 больше чем strlen), если я че не путаю..
Вот еще немного рискованный вариант:
sacred phoenix писал(а):если писать без RTL
type
mystr = record
len: integer;
str: pchar;
end;
const
S = 'string';
x: mystr = (len: length(S); str: S);
begin
writeln('Len: ', x.len);
writeln(x.str);
end.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4