¿Cómo separar dominio y la ruta de URL en C?

emmm:

Trato de leer un URL (que se contiene el camino o no, por ejemplo http://google.com y http://www.google.com/abc/dfg ) del argumento de la línea de comandos, a continuación, separarlos en nombre de dominio y camino, pero los resultados no parece correcta, y sin ningún error espectáculos valgrind error pero muestra valgrind. No puedo encontrar la manera de solucionarlo. ¿Puede ayudar a alguien? ¡Muchas gracias!

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    char* domain;
    char* path;

    sscanf(argv[1], "http://%[^/]/%[^\n]", domain, path);
    printf("domain: %s\n", domain);
    printf("path: %s\n", path);
}
Bruno:

valgrind muestra errores

y es rigth hacer, se ha perdido para inicializar dominio y la ruta de acceso a un (bastante) de almacenamiento válida

Por ejemplo Do

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    char domain[32];
    char path[64];

    sscanf(argv[1], "http://%31[^/]/%63[^\n]", domain, path);
    printf("domain: %s\n", domain);
    printf("path: %s\n", path);
}

Tenga en cuenta que la longitud limitado a leer no escribir fuera de las matrices (I eliminado 1 en el tamaño de tener lugar para el carácter nulo)

Pero también os animo a comprobar argv y el valor devuelto por sscanf saber cuánto elemento de leer, y para devolver un valor:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    char domain[32];
    char path[64];

    if (argc < 2) {
      fprintf(stderr, "Usage: %s <URL>\n", *argv);
      return -1;
    }

    switch (sscanf(argv[1], "http://%31[^/]/%63[^\n]", domain, path)) {
    case 2:
      printf("path: %s\n", path);
      /* no break */
    case 1:
      printf("domain: %s\n", domain);
      break;
    default:
      fputs("this is not a valid url\n", stderr);
    }

    return 0;
}

Por supuesto, también se puede inicializar el dominio [0] y la ruta [0] a 0.

Compilación y ejecuciones:

pi@raspberrypi:/tmp $ gcc -Wall a.c
pi@raspberrypi:/tmp $ ./a.out
Usage: ./a.out <URL>
pi@raspberrypi:/tmp $ ./a.out aze
this is not a valid url
pi@raspberrypi:/tmp $ ./a.out http://google.com
domain: google.com
pi@raspberrypi:/tmp $ ./a.out http://google.com/abc/dfg
path: abc/dfg
domain: google.com
pi@raspberrypi:/tmp $ ./a.out http://google.com/a_too_long_path_to_be_memorized_in_only_64_characters_so_it_is_cut
path: a_too_long_path_to_be_memorized_in_only_64_characters_so_it_is_
domain: google.com
pi@raspberrypi:/tmp $ 

Nota una URL segura ( https ) se considera no válido

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=405947&siteId=1
Recomendado
Clasificación