Я пытаюсь разобрать несколько элементов 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;
}
РЕДАКТИРОВАТЬ: Ну, то же самое происходит со мной на проходе, но это не из-за нулевого символа.