Посмотри, что он тебе говорит. Неожиданный EOF. Это означает, что он пытается найти конец некоторой предыдущей конструкции в вашем коде выше, а не находит его Возможно, неопределенный строковый литерал или функция, в которой отсутствует окончание справа.
Возможно, это недостающее подчеркивание в SURVEY QUESTION
.
Запишите пользовательский синтаксический анализатор или используйте одну из строковых функций замены для замены разделителя ':' и затем используйте sscanf()
.
Лично, я краду HTParse.c
модуль от W3C (это используется в веб-браузере рыси, например). Затем можно сделать вещи как:
strncpy(hostname, HTParse(url, "", PARSE_HOST), size)
Важная вещь о пользовании известной и отлаженной библиотекой состоит в том, что Вы не попадаете в типичные прерывания парсинга URL (много сбоев regexps, когда хост является IP-адресом, например, особенно IPv6 один).
Я написал простой код с помощью sscanf, который может проанализировать очень простые URL.
#include <stdio.h>
int main(void)
{
const char text[] = "http://192.168.0.2:8888/servlet/rece";
char ip[100];
int port = 80;
char page[100];
sscanf(text, "http://%99[^:]:%99d/%99[^\n]", ip, &port, page);
printf("ip = \"%s\"\n", ip);
printf("port = \"%d\"\n", port);
printf("page = \"%s\"\n", page);
return 0;
}
./urlparse
ip = "192.168.0.2"
port = "8888"
page = "servlet/rece"
С регулярным выражением, если Вы хотите простой способ. Иначе используйте FLEX/бизона.
Вы могли также пользоваться библиотекой парсинга URI