Vielen herzlichen Dank! Das hat mich sehr weit gebracht.
Was hältst nun von diesem?
Code:
char *Incoming_Buffer, *Temp_Buffer;
int size_Buffer;
Incoming_Buffer = malloc(4096);
bzero(Incoming_Buffer,sizeof(Incoming_Buffer));
Temp_Buffer = malloc(1024);
bzero(Temp_Buffer,sizeof(Temp_Buffer));
[...]
size_Buffer = recv(Client, Incoming_Buffer, 4096, 0);
Incoming_Buffer = realloc(Incoming_Buffer, size_Buffer+1);
Incoming_Buffer[size_Buffer+1] = (char)0;
Temp_Buffer = strtok(Incoming_Buffer,"\n");
if(Temp_Buffer != NULL)
{
printf("\n\nHTTP-Fields:\n%s\n",Temp_Buffer);
while( (Temp_Buffer = strtok(NULL,"\n")) != NULL)
printf("%s\n",Temp_Buffer);
}
printf("Received bytes: %d\n",size_Buffer);
=== Edited ===
Ich seh grad, das Temp_Buffer nach strtok nicht mehr Überlauf und korrektes Ende geprüft wird. Gibt es eine elegante Möglichkeit? strtok gibt keinen Wert der Länge des Arrays zurück. sizeof() berechnet auch nur bis zur maximalen Größe des Puffers, nicht bis zum tatsächlichen Ende (\0). Was kann man da machen, außer eine feste Größe von Temp_Buffer?
===/Edited ===
Ich habe außerdem ein kleines Problem dabei gefunden. Kann es sein, das sizeof() bei dynamischen Arrays einen falschen Wert berechnet? Zumindest ist das im MingW der Fall, wenn man sizeof(Incoming_Buffer) als int buflen an recv() übergibt.
Hat da jemand ähnliche Erfahrungen gemacht?
Viele Grüße
Mike
Lesezeichen