我想通过执行类似下面的操作来获取字符串缓冲区的子字符串。我不知道是否有可能(我现在已经用C编码了大约6个小时,但是你可以随心所欲地做技术,我想想我可以处理它(虽然我可能错了))
编辑:我想从缓冲区的开头到第一个空格取缓冲区的子串。
if (buffer[c] == ' ') {
in_addr_t addr;
char *ptr = *buffer;
if(inet_aton("*ptr to *ptr+c", &addr)!=0){
//do stuff;
}
}
答案 0 :(得分:4)
我必须做出一个假设,因为代码存在许多问题:假设缓冲区[c]是inet地址之前的第一个字符
if (buffer[c] == ' ')
{
in_addr_t addr
if (inet_aton(&buffer[c+1], &addr))
// do stuff
}
注意:
inet_aton
已弃用,因为它不支持ipv6。使用int inet_pton(int af, const char *src, void *dst);
进行向前兼容。 - 编辑 -
要将buffer
开头的子字符串带到(但不包括)buffer[c]
,其中任何一个都可以使用:
char buf2 [MAX];
strncpy (buf2, buffer, c);
buf2 [c] = '\000';
char buf2 [MAX];
sprintf (buf2, "%.*s", c, buffer);
char buf2 [MAX];
int j;
for (j = 0; j < c; ++j)
buf2 [j] = buffer [j];
buf2 [c] = '\000';
答案 1 :(得分:2)
如果您可以修改原始缓冲区,则可以忽略ptr
变量并执行:
if (buffer[c] == ' ') {
in_addr_t addr;
buffer[c] = '\0';
if (inet_aton(buffer, &addr) != 0) {
// do stuff;
}
}
如果您无法修改原始缓冲区,只需使用strncpy()
将您关注的部分复制到新缓冲区中。