[C] fragment wykładu

Awatar użytkownika
eaglefly
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 25 mar 2008, o 22:07
Płeć: Mężczyzna
Lokalizacja: Wołomin
Podziękował: 16 razy

[C] fragment wykładu

Post autor: eaglefly »

Nie kumam fragmentu pliku z wykładu(chodzi mi o tą część zaznaczoną na czerwono):

#include
#include

int
main( int argc, char **argv )
{
FILE * in = argc > 1 ? fopen( argv[1], "r" ) : stdin;
char buf[1024];

while( fgets( buf, 1024, in) != NULL ) {
if( strstr( buf, "Passed CLEAN" ) != NULL ) {
char m[4];
int d;
int ho,mi,se;
char mail[256];
char *tmp;
if( sscanf( buf, "%s %d %d:%d:%d", m, &d, &ho, &mi, &se ) == 5 ) {
printf( "godz: %d:%d:%d dzien %d %s ", ho, mi, se, d, m );
if( (tmp= strchr( buf, ' if( sscanf( tmp+1, "%s", mail ) == 1 ) {
mail[strlen(mail)-1]= '\0';
printf( "from %s", mail );
}

}
printf( "\n" );
}
}
}

return 0;
}
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[C] fragment wykładu

Post autor: smiechowiec »

eaglefly pisze: if( sscanf( tmp+1, "%s", mail ) == 1 ) {
mail[strlen(mail)-1]= '\0';
printf( "from %s", mail );
}
Funkcja sscanf odczytuje wartości z I parametru, przy pomocy II parametru jako formatu, wartości do kolejnych zmiennych, zwracając liczbę poprawnie zaczytanych danych w przypadku sukcesu.
eaglefly pisze: if( sscanf( tmp+1, "%s", mail ) == 1 )
Czyli jeżeli liczba poprawnie odczytanych zmiennych jest równa 1

f( (tmp= strchr( buf, '

Adres tmp+1 oznacza adres kolejnego znaku po "


mail[strlen(mail)-1]= 0; -"
dokładnie podstawiamy pod adres ostatniego znaku, znak końca łańcucha o kodzie 0.

printf( "from %s", mail ); <- zostało wypisać od kogo jest poczta czyli wyświetlić zawartość zmiennej mejl.
ODPOWIEDZ