Вопрос

Я новичок в 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()31 символ.Почему это происходит?

Это было полезно?

Решение

// now what? является strncpy():

hostname = malloc(hostnameLength + 1);
strncpy(hostname, url + 7, hostnameLength);
hostname[hostnameLength] = '\0'; // don't forget to null terminate!

Другие советы

После этого вам необходимо сделать:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top