代码之家  ›  专栏  ›  技术社区  ›  Ritwik Bose

在C中取字符串的子字符串

  •  2
  • Ritwik Bose  · 技术社区  · 15 年前

    我想通过执行下面这样的操作来获取字符串缓冲区的子字符串。我不知道这是否可行(我已经用C语言编写了大约6个小时了,但是我可以自由地做你喜欢的技术,我 认为 我可以处理(尽管我可能错了)

    编辑:我想从缓冲区的开始到第一个空间取一个子串。

    if (buffer[c] == ' ') {
        in_addr_t addr;
        char *ptr = *buffer;
        if(inet_aton("*ptr to *ptr+c", &addr)!=0){
               //do stuff;
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   wallyk    15 年前

    我必须做一个假设,因为代码有很多问题:假设缓冲区[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';
    
        2
  •  2
  •   Carl Norum    15 年前

    如果可以修改原始缓冲区,则可以忽略 ptr 变量和do:

    if (buffer[c] == ' ') {
        in_addr_t addr;
        buffer[c] = '\0';
        if (inet_aton(buffer, &addr) != 0) {
            // do stuff;
        }
    }
    

    如果无法修改原始缓冲区,只需使用 strncpy() 将您关心的部分复制到新的缓冲区中。