2015-07-18 3 views
1

Я пытаюсь сделать журнал в sdl, и мне нужно написать время. Текст должен быть указателем.Pascal string to pointer

date //pointer 
:= 
DateTimeToStr(Now);// AnsiString 

Здесь дата указатель и DateTimeToStr (Теперь) возвращает AnsiString и компилятор останавливается. Как это исправить?

+0

Это помогает, если вы предоставляете декларацию функции, которую вы вызываете, чтобы мы могли видеть фактические типы данных, которые ожидаются. Я сомневаюсь, что код SDL просто запрашивает параметр типа 'pointer'. Это скорее определено как 'char *'. –

ответ

0

Я собираюсь предположить, что вы используете Delphi или FreePascal. Ваш текущий код даст вам ошибку Incompatible Types. Вам нужно присвоить результат DateTimeToStr(Now) строке и назначить указатель на адрес этой строки. Вот пример.

procedure ShowDateTime; 
var 
    date: ^AnsiString; 
    str: AnsiString; 
begin 
    str := DateTimeToStr(Now); 
    date := @str; 
    Writeln(date^); 
end; 

Узнайте, как использовать указатели в Delphi или FreePascal.

+4

Разве они не должны использовать PChar/PWideChar? –

+0

Это неправильно, если вы не используете версию Паскаля 1980-х годов. Любая современная версия (означающая позже Turbo Pascal) вместо этого использовала бы PChar. (И поскольку вы указали плакат на * с помощью указателей в Delphi или FreePascal *, я предполагаю, что мы можем предположить, что Pascal 1980-х годов за столом.) –

0

Решение заключается в использовании PChar, то есть pointer to Char.

var 
    str: AnsiString; 
    pDateStr: PChar; 
... 
    str := DateTimeToStr(Now); 
    pDateStr := PChar(str); 
    // Do whatever you want with the PChar pDateStr