C: проблема со строками - PullRequest
       4

C: проблема со строками

2 голосов
/ 23 февраля 2010

Я новичок в C89 и не совсем понимаю, как работают строки. Я занимаюсь разработкой на Windows 7.

Вот что я пытаюсь сделать на Java:

String hostname = url.substring(7, url.indexOf('/'));

Вот моя неуклюжая попытка сделать это в C89:

// well formed url ensured
void get(char *url) {
    int hostnameLength;
    char *firstSlash;
    char *hostname;

    firstSlash = strchr(url + 7, '/');
    hostnameLength = strlen(url) - strlen(firstSlash) - 7;
    hostname = malloc(sizeof(*hostname) * (hostnameLength + 1));
    strncpy(hostname, url + 7, hostnameLength);
    hostname[hostnameLength] = 0; // null terminate
}

Обновление для отражения ответов

Для hostnameLength из 14 hostname составляет malloc() d 31 символов. Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

// now what? - strncpy():

hostname = malloc(hostnameLength + 1);
strncpy(hostname, url + 7, hostnameLength);
hostname[hostnameLength] = '\0'; // don't forget to null terminate!
0 голосов
/ 23 февраля 2010

После этого нужно сделать:

hostname = malloc(sizeof(char) * (hostnameLength+1));
strncpy(hostname,  url + 7, hostnameLength);
hostname[hostnameLength] = 0;

Подробнее о копировании см. strncpy . Он требует, чтобы указатель назначения был выделен заранее (следовательно, malloc), и будет копировать только столько символов ...

...