我正在尝试解析C中URL的几个元素。
这是网址的原型:
的ftp://并[d名称>:其中通过> @] LT;域> /< URL>“中;
问题是某些元素没有正确保存,例如我尝试在此处保存 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;
}
编辑:嗯,同样的事情发生在我的传递中,但不是因为null char。
答案 0 :(得分:2)
请尝试UriParse
,而不是构建自己的网址解析器答案 1 :(得分:1)
来自手册页:
strncpy()函数类似,只是复制了最多n个字节的src。警告:如果之间没有空字节 在src的前n个字节中,放在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()s。