1) и 2) Turbo-C использовал версию стандарта C90. Он не разрешал объявления переменных в середине тела { }
, но только в верхней части. Поэтому char* ch
должен быть перемещен:
int main (void)
{
char* ch = NULL
...
3) Вы пытаетесь умножить указатель (char *) 209
. Это просто не разрешено в C и не будет компилироваться на современных компиляторах.
И, наконец, арифметика указателей ch++
, используемая для указателя, который не указывает на выделенный объект, не очень хорошо определена ни в одной версии C. Это , вероятно, работало в Turbo C, но без гарантий.
Я думаю, что эта программа должна была получить дамп оперативной памяти и сохранить его в текстовом файле. MS DOS разрешил прямой доступ к памяти. Однако код был сомнительным еще в 1989 году.
Использование char
для доступа к необработанной памяти - плохая идея, так как это тип с подписью, определенной реализацией. Вместо этого используйте unsigned char
или uint8_t
.