1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct bufferstuff
{
char* buffer_s;
long laenge_s;
};
void* rmove(void* val)
{
/*CASTEN VON VOID IN STRUCT BUFFERSTUFF*/
struct bufferstuff* bufferstruct = (struct bufferstuff*) val;
char* buffer;
long laenge;
size_t n;
/*BUFFER AUS BUFFERSTRUCT AN BUFFER ZUR BEARBEITUNG ÜBERGEBEN*/
buffer = bufferstruct->buffer_s;
laenge = strlen(buffer);
/*i UM SCHLEIFENDURCHGÄNGE ZU ZÄHLEN - UM ZU WISSEN WO ARRAY ZU ENDEN HAT: '\0'*/
int i = 0;
/*WHILE SCHLEIFE SUCHT ERSTES VORKOMMEN VON c,g,t,a oder N UND ARBEIET SO LANGE BIS SIE AM ENDE DES ARRAYS ANKOMMT*/
while((n = strcspn(buffer,"cgtaN")) != laenge-i)
{
if(n >= laenge-i) /*return FALLS ENDE DES ARRAYS ERREICHT IST, ANSONSTEN SEGFAULT*/
return (void*)buffer;
memmove(&buffer[n], &buffer[n+1], laenge-n-1 ); /*MEMMOVE SCHIEBT ARRAY NACH VORNE*/
i++; /*ZÄHLT SCHLEIFENDURCHGÄNGE*/
}
return (void*)buffer;
}
struct bufferstuff* buffercreate(FILE* datei)
{
/*FUNKTION UM DATEI IN BUFFER ZU SPEICHERN*/
char* buffer;
long laenge;
size_t ergebnis;
long anzahl;
fseek(datei, 0, SEEK_END);
laenge = ftell(datei);
rewind(datei);
buffer = (char*)malloc(sizeof(char)* laenge);
if (buffer == NULL){printf("ERROR"); exit(2);}
ergebnis = fread(buffer, 1, laenge, datei);
if (ergebnis != laenge) {printf("Error"); exit(3);}
fclose(datei);
/*STRUCT ALLOC UM ES AN DIE VOID FUNKTION ZU ÜBERGEBEN/ GGF. MAL MIT THREADS ARBEITEN*/
struct bufferstuff* bufferstruct = (struct bufferstuff*)malloc(sizeof(bufferstruct));
bufferstruct->buffer_s = buffer;
bufferstruct->laenge_s = laenge;
/*AUSFÜHREN DER REMOVE FUNKTION/ STRUCT IN VOID GECASTET*/
buffer = (char*)rmove((void*)bufferstruct);
/*NEUEN BEARBEITETEN BUFFER IN STRUCT SPEICHERN UM STRUCT ZU RETURNEN*/
bufferstruct->buffer_s = buffer;
return bufferstruct;
}
main(int argc, char* argv[])
{
FILE* datei;
struct bufferstuff* bufferstruct = (struct bufferstuff*)malloc(sizeof(bufferstruct));
datei = fopen((argv[1]), "r");
bufferstruct = buffercreate(datei);
/*BUFFERSTRUCT BEINHALTET NUN BEARBEITETEN BUFFER*/
char* buffer;
/*IN BUFFER SPEICHERN UM GGF. AUSZUGEBEN*/
ogramm
buffer = bufferstruct->buffer_s;
printf("%s", buffer);
} |