我是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个字符。为什么会这样?
答案 0 :(得分:2)
// now what?
是strncpy()
:
hostname = malloc(hostnameLength + 1);
strncpy(hostname, url + 7, hostnameLength);
hostname[hostnameLength] = '\0'; // don't forget to null terminate!
答案 1 :(得分:0)
之后,你需要做:
hostname = malloc(sizeof(char) * (hostnameLength+1));
strncpy(hostname, url + 7, hostnameLength);
hostname[hostnameLength] = 0;
有关复制的详细信息,请参阅strncpy。它确实需要提前分配目标指针(因此是malloc),并且只会复制很多字符...