C:字符串问题

发布于 2024-08-22 08:23:15 字数 745 浏览 7 评论 0原文

我是 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 个,hostnamemalloc()'d 31 个字符。为什么会出现这种情况?

I am new to C89, and don't really understand how strings work. I am developing on Windows 7.

Here is what I am trying to do, in Java:

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

Here is my clumsy attempt to do this in 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
}

Update to reflect answers

For a hostnameLength of 14, hostname is malloc()'d 31 characters. Why does this happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红颜悴 2024-08-29 08:23:15

// 现在怎么办?strncpy()

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

// now what? is strncpy():

hostname = malloc(hostnameLength + 1);
strncpy(hostname, url + 7, hostnameLength);
hostname[hostnameLength] = '\0'; // don't forget to null terminate!
可是我不能没有你 2024-08-29 08:23:15

之后,您需要执行以下操作:

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

有关复制的详细信息,请参阅 strncpy。它确实需要提前分配目标指针(因此是 malloc),并且只会复制这么多字符......

After that, you need to do:

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

See strncpy for details on the copying. It does require your destination pointer to be allocated in advance (hence the malloc), and will only copy so many characters...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文