【发布时间】:2010-02-23 01:27:05
【问题描述】:
我是 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
}
更新以反映答案
对于 14 个 hostnameLength,hostname 是 malloc()'d 31 个字符。为什么会这样?
【问题讨论】:
-
@Rosarch,该代码不应该分配 31,它应该分配 15...您确定您显示的代码就是您正在运行的代码吗?你如何检查分配的大小?我刚刚运行并测试了您在这里的内容,并且得到了预期的结果。