Строковые литералы доступны только для чтения и не могут быть изменены. Следовательно, ошибка времени выполнения. Вам нужно будет использовать переменную.
var
S: array[0..6] of Char;
....
// Populate S with your own library function
S[0] := #32;
Поскольку вы не используете библиотеку времени выполнения Delphi вы должны придумать свои собственные функции для заполнения массивов символов. Например, вы можете написать свой собственный StrLen
, StrCopy
и т. Д. Вам нужно будет сделать версии, которым передаются длины буфера назначения, чтобы гарантировать, что вы не переполняете упомянутые буферы.
Конечно, использование встроенного строкового типа будет неудобно. Возможно, вам придется придумать нечто более мощное, чем специальные массивы символов.
Вы можете передать str прямо в StrCopy в третьем блоке. Asker не использует библиотеки, хотя поэтому не может использовать ни один из первых трех блоков кода. Последний блок такой же, как и в вопросе. Не удалось выполнить ошибку времени выполнения по причинам, которые я объяснил в своем ответе. –
1 пример не будет работать, потому что нет getMem и memoryManagement. 2,3, потому что нет strCopy. 4 отправил меня в исключение :( –
Argh ... Извините. Если вам нужно написать код без каких-либо стандартных модулей и без использования строк pascal, вы должны реализовать свой собственный StrCopy (как писал DH). Разве это не вид из домашней работы или что-то?!? – g2mk