gpt4 book ai didi

c - 域名解析

转载 作者:行者123 更新时间:2023-11-30 14:21:54 30 4
gpt4 key购买 nike

我有这个代码:

        #include <stdio.h>
#include <string.h>

int main()
{
char buf[255];
char buf2[255];
char myhost[255] = "subdomain.domain.com";

char *pch;
int token_counter = 0;

memset(buf, 0, 255);
memset(buf2, 0, 255);
pch = strtok(myhost, ".");
while (pch != NULL)
{
pch = strtok(NULL, ".");
if (pch == NULL)
{
memset(buf, 0, 255);
strncpy(buf, buf2, strlen(buf2) - 1);
break;
}
token_counter++;
strcat(buf2, pch);
strcat(buf2, ".");
}
printf("Domain: %s\n", buf);
return 0;
}

如果 myhost 被定义为 subdomain.domain.com,则工作正常,但如果是 domain.com,则最终结果显示为“com”。

如何让它正确检测它是子域还是域?也许我可以包含已知顶级域名的列表?

最佳答案

strtok 太过分了,而 strcat 则很浪费。如果您只想打印第 n 个 . 之后的所有内容,请使用 strchr 或仅检查字符串以查找第 n 个 .。如果需要,请从字符串末尾开始计数。

让我解释一下为什么 strcat 在这里浪费时间。考虑:

const char *name = "foo.bar.baz.qux.net";
printf( "%s\n", name + 8 );

如果您想打印“baz.qux.net”,则无需将该字符串复制到新的缓冲区中,因为您已经有一个指向所需字符串的第一个字符的指针。使用你所拥有的。您需要做的就是在字符串中找到指向所需 . 的指针,然后执行 printf( "%s\n", dot + 1 )puts(点+1)。 (puts 在这里更好,但您可能更熟悉 printf)

关于c - 域名解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293487/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com