63 lines
1.6 KiB
C
63 lines
1.6 KiB
C
|
/*
|
||
|
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;
|
||
|
}
|