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.


Anmelden zum Antworten