2013-09-02 4 views
0

Я смотрю на пример для strchr() на: http://www.cplusplus.com/reference/cstring/strchr/strchr(), Как это правильно найти индекс полукокса

Почему это правильно найти индекс? Наглядно это выглядит, как он должен давать отрицательный индекс:

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

int main() 
{ 
    char str[] = "This is a sample string"; 
    char * pch; 
    printf ("Looking for the 's' character in \"%s\"...\n",str); 
    pch=strchr(str,'s'); 
    while (pch!=NULL) 
    { 
    printf ("found at %d\n",pch-str+1); 
    pch=strchr(pch+1,'s'); 
    } 
    return 0; 
} 

ответ

2

Наглядно это выглядит, как он должен давать отрицательный индекс:

Нет, потому что strchr возвращает указатель на место, где этот символ найден. Поэтому каждый раз, когда strchr возвращает не NULL, этот указатель будет где-то «дальше вниз» по сравнению с указателем, где он начинался.

+0

Но было бы все еще верным, если бы вы попробовали его с указателем на кучу? –

+0

Значит, адрес 'pch' указывает на минус адрес' str'? – asimes

+0

@SamDufel Да, он работает с любой смежной частью памяти с 0-символом. – cnicutar

Смежные вопросы