#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void break_url(const char *url)
{
  char proto[16] = "";
  char user_to_port[512] = "";
  char path[256] = "";
  char user_pass[128] = ""; // zastanawiam się czy tu nie powinno być 512
  char host_port[512] = "";
  char user[64] = "";
  char pass[64] = "";
  int ret;
  char host[256] = "";
  unsigned short port = 0;
  // url == jakis url
  sscanf(url, "%15[^:]://%511[^/]%255s",
    proto,
    user_to_port,
    path);
  // korzystam z user_to_port otrzymanego wcześniej
  ret = sscanf(user_to_port, "%127[^@]@%511s",
    user_pass,
    host_port);
  if(ret == 2)
  {
    sscanf(user_pass, "%63[^:]:%63s", user, pass);
  }
  else
  {
    strcpy(host_port, user_to_port);
    // oba mają 512, więc overflow nie będzie
  }
  sscanf(host_port, "%255[^:]:%hu", host, &port);
  // Wypisz
  printf("Wejsciowy URL: %s\n", url);
  printf("Proto: %s\n", proto);
  if(*user) printf("User : %s\n", user);
  if(*pass) printf("Pass : %s\n", pass);
  printf("Host : %s\n", host);
  if(port) printf("Port : %u\n", port);
  if(*path) printf("Path : %s\n", path);
  putchar('\n');
}
int main(void)
{
  break_url("http://www.onet.pl");
  break_url("http://www.onet.pl/ala.html");
  break_url("http://tomek@www.onet.pl/ala.html");
  break_url("http://tomek:mapsa@www.onet.pl/ala.html");
  break_url("http://tomek:mapsa@www.onet.pl:1234/ala.html");
  break_url("http://tomek@www.onet.pl:1234/ala.html");
  break_url("http://www.onet.pl:1234/ala.html");
  break_url("http://www.onet.pl:1234");
  return 0;
}
        
        Back to Code Snippets / Powrót do Strzępów Kodu

  






Add a comment: