Вопрос
Я новичок в 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), и будет копировать только определенное количество символов...
Не связан с StackOverflow