 |
FreeMem(p, Sizeof(ItemType)); {Определение объема памяти
для освобождения}
В Турбо Си для распределения и освобождения динамической па-
мяти используются подпрограммы, которые абсолютно похожи на
GetMem и Dispose в Турбо Паскале:
*;
=(*) calloc(,);
/* или =(*) malloc();*/
/* или =(*) realloc(,);*/
free ();
typedef int ItemType;
ItemType *p;
p = (ItemType*) malloc(sizeof(ItemType));
...
free(p);
Все три подпрограммы в Си возвращают родовой указатель, ко-
торый может быть переведен в соответствующий тип. Все они также
возвращают NULL, если нет достаточной памяти для распределения.
Функция саlloc ожидает, что вы передадите ей количество соз-
даваемых элементов данных и размер (в байтах) одного элемента.
Она создает элементы данных, присваивает им всем 0 и возвращает
указатель в исходный блок. Это очень удобно для автоматического
создания массивов.
malloc сообщается, сколько нужно байт для распределения.
free освободит пямять, на которую указывает .
- 161,162 -
Аргументы командной строки.
-----------------------------------------------------------------
Когда вы создаете Com файл, используя Турбо Паскаль, ваша
программа может считать любые аргументы, указанные в строке, ис-
пользуя функции ParamCount и ParamStr. Для примера, если вы соз-
дали программу, назвав ее DUMPIT.COM, и исполняете ее следующим
образом:
A>dumpit myfile.txt other.txt 72
ParamCount вернет величину 3, и ParamStr возвратит следующие
величины:
ParamStr(1) myfile.txt
ParamStr(2) other.txt
ParamStr(3) 72
Турбо Си позволяет вам идентифицировать argc, argv, env как
основные параметры:
main(int argc, char *argv[], char *env[]);
{
...основное тело...
}
где argc - количество аргументов, argv[] - массив строк, включаю-
щий параметры. В этом примере argc равен 4, а argv[] указывает на
следующее:
argv[0] A:\DUMPIT.EXE
argv[1] myfile.txt
argv[2] other.txt
argv[3] 72
argv[4] (null)
В Си под управлением MS-DOS версий 3.x, argv[0] определен
(ParamStr(0) - нет) и содержит имя выполняемой программы. Для MS-
DOS версии 2.х, argv[0] указывает на пустую строку (""), argv[4]
также содержит ноль.
Третий аргумент env[] - это массив, содержащий строки следу-
ющей формы:
- 163,164 -
envvar = value
где envvar - имя окружения переменной, а value - строковая вели-
чина, которую содержит envvar.
Файлы ввода/вывода.
-----------------------------------------------------------------
В стандартном Паскале имеется два типа файлов: текстовый
(описываемый как text) и данных (date, описываемый как file of
<тип>). Последовательность для открытия, модификации и закрытия
файлов почти идентична для обоих типов. Турбо Паскаль имеет тре-
тий тип (нетипизированный файл), что очень напоминает двоичные
файловые операции, используемые в Турбо Си.
В Си с файлами обычно обращаются, как с потоком символов
(побайтно); для вас текстовый файл от файла данных в основном от-
личается признаками - t (текстовый) и b (binary - двоичный), ко-
торые могут указываться при определении файла.
Эквиваленты между двумя языками:
Турбо Паскаль Турбо Си
----------------------------------------------------------------
var
I :Integer; Int i;
- 165,166 -
X :Real; float x;
Ch :Char; char ch;
Line :string[80]; char line[80];
myRec :RecType; struct rectype myrec;
buffer :array[1..1024] of char char buffer[1024]
F1 :text; FILE *f1;
F2 :file of RecType; FILE *f2;
F3 :file; FILE *f3;
Assign(,); =fopen(,"r");
Reset (); /* or
=fopen(,"r+");*/
Reset (,); /* or
f1=fopen(,"r+t");*/
/* or
f2=fopen(,"r+b");*/
Assign(,); =fopen(,"w");
Rewrite(); /* or
=fopen(,"w+");*/
Rewrite(,);/* or
f1=fopen(,"w+t");*/
/* or
f2=fopen(,"w+b");*/
Assign(,); =fopen(,"a+";
Append(); /* or
=fopen(,"a+t");*/
/* or
=fopen(,"a+b");*/
Read(F1,Ch); ch=getc(f1);
Readln (F1,Line); fgets(f1,80,line);
Readln (F1,I,X); fscanf(f1,"%d%f",gi,gx);
Read (F2,MyRec); fread(&myrec,
sizeof(myrec),i,1,f2);
BlockRead(F3,buffer,Sizeof(buffer)); fread (&bufer,1,
sizeof(buffer), f3);
Write(F1,Ch); fputc(ch,f1);
/*or fprint (f1,"%c",ch);*/
Write(F1,Line); fputs(line,f1);
/*or fprint(f1,"%s",line);*/
Write(F1,,,I,X); fprint(f1,"%d%f",i,x);
- 167,168 -
Writeln(F1,I,X); fprint(f1,"%d%f\n",i,x);
Write(F2,MyRec); fwrite(&myrec,
sizeof(myrec),1,f2);
Seek(F2,); fseek(f2,
*sizeof(rectype),0);
Flush(); fflush();
Close(); fclose();
BlockWrite(F3,buffer,Sizeof(buffer); fwrite(&buffer,1,
sizeof(buffer),f3);
Вам необходимо обратиться к книге 2 (Справочное руководство)
для более детального понимания работы каждой из программ на Турбо
Си.
Это короткий пример программы демонстрирует вывод текстового
 |
|