C socket read - znak ETX na końcu

0

Hej,

Odczytuję w C dane z socketa, dokładnie z serwera pop3.
Mam zadeklarowany bufor:

char data[2048];
memset(data, '\0', sizeof(data)); 

Odczyt danych:

rcvd = read((*sock), data, sizeof(data)); 

I teraz muszę podzielić to po nowych liniach, ponieważ jeśli linia zaczyna się kropką po której występuje jakikolwiek znak, to tzreba ją usunąć:

tok = strtok_r(data, "\r", &save1);
        
        while(tok != NULL){
            
            if(strncmp(tok, "\n.\0", 3) == 0){
            
                end = 1;
                
            } else if(strncmp(tok, "\n.", 2) == 0){
            
                char data2[rcvd];
                memset(data2, "\0", sizeof(data2));
                memcpy(data2, tok+2, sizeof(data2));
                fprintf(fp, data2);
                fprintf(fp, "\n");
            
            } else {
            
                fprintf(fp, tok);
            
            }
            
            tok = strtok_r(NULL, "\r", &save1);
            if((tok == NULL && newLineAtEnd == 1) || (tok != NULL)){
                
                //fprintf(fp, "\n");
                
            }
        
        }
        
        memset(data, '\0', sizeof(data)); 

Problem mam w pierwszym else if, jeśli strtok pobrał ostatni element z bufora po podziale, to na końcu jest jeden randomowy znak, znak ETX, jeden randomowy znak. Nie mam pojęcia skąd to się bierze, ani jak się tego pozbyć. Any ideas? Będę mega wdzięczny ;)

0

Taki strzał, bo za mało kodu podałeś.

                memcpy(data2, tok+2, sizeof(data2));

zmień na
memcpy(data2, tok+2, sizeof(data2)-1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1