Взять подстроку строки в c - PullRequest
2 голосов
/ 21 января 2010

Я хочу взять подстроку буфера строки, выполнив что-то вроде ниже. Я не знаю, возможно ли это (я кодирую на C уже около 6 часов, но не стесняйтесь быть настолько техническим, насколько вам нравится, я думаю Я справлюсь (хотя может ошибаться))

Редактировать: я хочу взять подстроку буфера от начала буфера до первого пробела.

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

Ответы [ 2 ]

4 голосов
/ 21 января 2010

Я должен сделать одно предположение, так как с кодом существует ряд проблем: Предполагается, что буфер [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';
2 голосов
/ 21 января 2010

Если вы можете изменить исходный буфер, вы можете просто проигнорировать переменную ptr и сделать:

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

Если вы не можете изменить исходный буфер, просто используйте strncpy(), чтобы скопировать нужную деталь в новый буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...