Hardwarenahe_Programmierung/examples/c/tp-heap.c

63 lines
1.6 KiB
C
Raw Normal View History

2018-09-26 21:54:09 +02:00
/*
tp-heap.c: TecPro Beispielprogramm
Kurzbeschreibung: Zeichenketten in C und dynamische Speicherverwaltung
C.Koch | HS-Emden-Leer | 12.04.2011
Compile: gcc -g -Wall -o tp-heap tp-heap.c
Analyse: ddd tp-heap
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h> /* z.B. dynamische Speicherverwaltung via calloc() */
#define DYNMEM 32*1024*1024 /* Größe des dynamischen Speicherbereichs definieren */
void FileWrite(char* sInput);
int main(void)
{
/* Speicher auf dem Stack ist schnell adressiert,
jedoch pro Applikation nur begrenzt verfügbar (siehe $ ulimit -a) */
/* Beispiel: Textdatei einlesen */
/* Dateigröße? 8 kByte / 8MByte / 80 MByte? */
char cTextA[8*1024]; /* STACK */
char *cTextB;
FILE* fpDatei;
char *cStatus;
int iSize;
cTextB = calloc(DYNMEM,sizeof(char)); /* HEAP */
/* Programm abbrechen, falls ein Fehler
bei der Speicherallozierung auftritt*/
if(cTextB == NULL)
{
printf("-> FEHLER: Speicherallozierung nicht erfolgreich!\n");
return -1;
}
printf("\nDynamischer Speicher: %d kByte @ %p - %p\n", (DYNMEM * sizeof(char))/1024, cTextB, cTextB+(DYNMEM * sizeof(char)) );
/* Datei öffnen und zeilenweise auslesen */
fpDatei = fopen("tp-file/out.txt","r");
do
{
cStatus = fgets(cTextA, 100, fpDatei);
/* Länge des gelesenen Strings ermitteln */
iSize = strlen(cTextA);
cTextA[iSize-1]='*';
sprintf(cTextB,"%03u Zeichen -> %s |",iSize, cTextA);
puts(cTextB);
getchar();
}while(cStatus != NULL);
/* Datei wieder schließen und Speicher freigeben*/
fclose(fpDatei);
free(cTextB);
return 0;
}