#include <stdio.h>
#include <string.h>
#include <alloca.h>
#define METHOD_SIZE (sizeof("http://") - 1)
int get_host(const char *url, unsigned int len, char **res, unsigned int size)
{
unsigned int i;
/* chaine vide */
if ( 0 > len )
return 0;
/* chaine ne contenant meme pas la methode ... */
if ( METHOD_SIZE > len )
return 0;
for ( i = METHOD_SIZE; i < len; i++ ) {
if ( '/' == url[i] )
break;
}
/* pas assez de memoire pour contenir le resultat */
if ( size < len )
return -1;
len = i - METHOD_SIZE;
memcpy(*res, &url[METHOD_SIZE], len );
return len;
}
int main(int ac, char *av[])
{
char *host = 0;
int len = 0;
if ( ac < 2 )
return 1;
host = (char *) alloca(32);
len = get_host(av[1], strlen(av[1]), &host, 32);
if ( 0 < len )
printf("host: %.*s\n", len, host);
else
printf("ret: %d\n", len);
return 0;
}
[^] # Re: GNet lib
Posté par forc3 . En réponse au message Avoir le host d'une url. Évalué à 2.
#include <stdio.h> #include <string.h> #include <alloca.h> #define METHOD_SIZE (sizeof("http://") - 1) int get_host(const char *url, unsigned int len, char **res, unsigned int size) { unsigned int i; /* chaine vide */ if ( 0 > len ) return 0; /* chaine ne contenant meme pas la methode ... */ if ( METHOD_SIZE > len ) return 0; for ( i = METHOD_SIZE; i < len; i++ ) { if ( '/' == url[i] ) break; } /* pas assez de memoire pour contenir le resultat */ if ( size < len ) return -1; len = i - METHOD_SIZE; memcpy(*res, &url[METHOD_SIZE], len ); return len; } int main(int ac, char *av[]) { char *host = 0; int len = 0; if ( ac < 2 ) return 1; host = (char *) alloca(32); len = get_host(av[1], strlen(av[1]), &host, 32); if ( 0 < len ) printf("host: %.*s\n", len, host); else printf("ret: %d\n", len); return 0; }