Zamieszczam napisaną w języku C funkcję do sprawdzania poprawności (parsowania) adresu IP. Funkcja nie korzysta z wyrażeń regularnych, tak więc nie potrzeba załączać do programu żadnych dodatkowych bibliotek.

Funkcja zwraca wartość liczbową int, czyli 0 w przypadku poprawnego adresu IP na wejściu, 1 w przeciwnym wypadku.

int parse_ip(char ip[16]){
        char x[4];
        int j,k=0,l=0,m=0,n=0;
        for(j=0;j<4;j++) x[j]=0;
        for(i=0;i<16 && m!=4;i++){
                if(ip[i]=='.' || ip[i]==0){
                        k++;
                        if((atoi(x)==0 && ip[i-1]!='0') || (atoi(x)==0 && l!=1)) return 1;
                        l=0;
                        if(ip[i]=='.') n++;
                        if(atoi(x)<0 || atoi(x)>255 || k>4 || n>3){
                                return 1;
                        }
                        else{
                                for(j=0;j<4;j++) x[j]=0;
                                m++;
                        }
                }
                else{
                        if(l<4){
                                x[l]=ip[i];
                        }
                        else{
                                return 1;
                        }
                        l++;
                }
        }
        if(m==4) return 0;
}

Przykładowe użycie:

if(parse_ip("192.168.1.1")==0){
        printf("Adres prawidłowy");
}
else{
        printf("Adres błędny");
}

Działanie funkcji przetestowane, jednak zamieszczam jako wersję Beta. W przypadku napotkania błędu w działaniu proszę o kontakt.