簡體   English   中英

在c中獲取字符串的子字符串

[英]Take substring of a string in c

我想通過執行以下操作來獲取字符串緩沖區的子字符串。 我不知道是否可能(我現在已經用C進行了大約6個小時的編碼,但是隨時隨心所欲,我我可以處理(盡管我可能錯了))

編輯:我想從緩沖區的開頭到第一個空格的緩沖區的子字符串。

if (buffer[c] == ' ') {
    in_addr_t addr;
    char *ptr = *buffer;
    if(inet_aton("*ptr to *ptr+c", &addr)!=0){
           //do stuff;
    }
}

我必須做一個假設,因為代碼存在許多問題:假設buffer [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] ,以下任何一種都可以工作:

1

char buf2 [MAX];
strncpy (buf2, buffer, c);
buf2 [c] = '\000';

2

char buf2 [MAX];
sprintf (buf2, "%.*s", c, buffer);

3

char buf2 [MAX];
int  j;
for (j = 0;  j < c;  ++j)
    buf2 [j] = buffer [j];
buf2 [c] = '\000';

如果可以修改原始緩沖區,則可以忽略ptr變量並執行以下操作:

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

如果您不能修改原始緩沖區,只需使用strncpy()將您關心的部分復制到新緩沖區中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM