/* 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 #include #include /* 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; }