Разобрать URL в C - PullRequest
       2

Разобрать URL в C

1 голос
/ 04 декабря 2011

Я пытаюсь разобрать несколько элементов URL в C.

Это прототип URL:

ftp: // [: @] / ";

Проблема в том, что некоторые элементы не сохраняются правильно, например, я пытаюсь сохранить ftp: // здесь ftp [6] . Однако, когда я печатаю его, я получаю что-то вроде ftp: / d @ . Что даже не должно быть возможным, так как массив не имеет достаточно места для этого.

int main()
{

   char ftp[6];
   char *name;
   char *pass;
   char *domain;
   char *url;
   char *var = "ftp://[coiso:pass@]teste/umgrandeurl";
   int x;
   int size_name;
   int size_pass;
   int size_domain;
   int size_url;
   int flag = 0;
   for (x = 0; x < strlen(var); x++) {

      if (x == 6) {
         strncpy(ftp, var, 6);
         if (strcmp(ftp, "ftp://") != 0) {
         }
      }

      if (var[x] == ':' && x > 3) {
         size_name = x - 7;
         name = (char *)malloc(size_name + 1);

         strncpy(name, &var[7], size_name);

      }

      if (var[x] == '@') {
         size_pass = x - (8 + size_name);
         pass = (char *)malloc(size_pass + 1);

         strncpy(pass, &var[8 + size_name], size_pass);

      }

      if (var[x] == '/' && x > 6 && flag == 0) {
         flag = 1;
         size_domain = x - (10 + size_pass + size_name);
         domain = (char *)malloc(size_domain + 1);
         strncpy(domain, &var[10 + size_pass + size_name], size_domain);

      }

      if (x == strlen(var) - 1) {
         size_url = x - (10 + size_pass + size_name + size_domain);
         url = domain = (char *)malloc(size_url + 1);
         strncpy(url, &var[11 + size_pass + size_name + size_domain], size_url);
         printf("%d", size_url);
      }

   }

   return 0;
}

РЕДАКТИРОВАТЬ: Ну, то же самое происходит со мной на проходе, но это не из-за нулевого символа.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Вместо создания собственного парсера URL попробуйте UriParse

1 голос
/ 04 декабря 2011

со страницы руководства:

Функция strncpy () аналогична, за исключением того, что копируется не более n байтов src.Предупреждение: если среди первых n байтов src нет нулевого байта, строка, помещенная в dest, не будет заканчиваться нулем

size_url=x-(10+size_pass+size_name+size_domain);
url=domain =(char*) malloc( size_url+1);
strncpy(url,&var[11+size_pass+size_name+size_domain],size_url+1);
                                                             ^^ 

... и аналогично для других размеров / strncpy() с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...