array an funktion
-
Hallo zusammen,
ich hoffe jemand kann mir schnell auf die Sprünge helfen
Ich übergebe der Funktion readline einen &buffer, diese soll von dieser Funktion gefüllt werden.
leider klappt das nicht wirklich.
printf("[size:%d] <<< \"%c\"\n", (rsize-1), buffer);
schmeißt mir nicht das richtige bez. nichts heraus. In "getc" ist aber immer der richtige Wert bez. etwas Sinniges.
char buffer[SOMAXCONN]; bzero(&buffer, sizeof (buffer)); for( ; ; ) { if((rsize = readline(clientfd, &buffer, sizeof (buffer))) == 0 && rsize > 0) { return (-1); } else { printf("[size:%d] <<< \"%c\"\n", (rsize-1), buffer); return (0); }
ssize_t readline(int fd, void *vptr, size_t maxlen) { ssize_t rsize, n; char getc, *ptr; ptr = vptr; for (n = 1; n < maxlen; n++) { /* read one char */ if(((rsize = read(fd, &getc, 1)) != -1) && rsize == 1) { /* write in buffer */ ptr[n-1] = getc; /* * *... */ }
würde mich über Tipps freuen
zyon
-
ok, das ganze klappt schon so wie ich will.
wenn ich meine buffer durchlaufe:
for (pt = &(buffer[0]); pt < &(buffer[rsize-1]); pt++)
steht in buffer auch drin, was drin stehen soll. Aber nun frage ich wie read(2) das so machen. Da übergebe ich auch "char a[200]" und kann nachdem read(2) damit fertig ist auch damit Arbeiten indem ich printf("%c", &a); machen...
-
zyon schrieb:
for (pt = &(buffer[0]); pt < &(buffer[rsize-1]); pt++)
Oder einfach
for (pt = buffer; pt < buffer + rsize - 1; pt++)
Wobei man
buffer + rsize - 1
vielleicht nicht jedesmal berechnen sollte.Aber nun frage ich wie read(2) das so machen. Da übergebe ich auch "char a[200]" und kann nachdem read(2) damit fertig ist auch damit Arbeiten indem ich printf("%c", &a); machen...
Nö. Der Compiler sollte sich bei printf() darüber beschweren, dass du mit %c ein Zeichen ausgeben willst, dann aber einen Zeiger auf einen Zeiger auf ein Zeichen als 2. Argument übergibst. Wie man: read(2) funktioniert, könntest du die Unix-Leute fragen.
-
use: gcc -Wall -Wextra -std=c99 -pedantic-errors
&buffer ist char** (wenn du char* als Parameter und nicht void* nehmen würdest, dann würde der Compiler dir sogar den Fehler sagen :))
btw. Einzelne Zeichen zu lesen ist extrem ineffizient.