правильно пользоваться указателями - не юзать ++ ?
От: Аноним  
Дата: 08.11.09 04:15
Оценка: :)))
Всем пример!
чтобы программа никогда не падала — не использовать оператор ++ для указателя?

допустим нам нужно подсчитать сколько пробелов в строке.
char *buf = "hello word!";

будет ли безопасно использоватьуказатель так:

size_t count_space_symbols = 0;

char *end_buf = buf + strlen(buf) [b]- 1[b]; // указывает на последний символ в строке
while (buf <= end_buf)
{
    if (*buf++ == ' ')
        count_space_symbols ++;
}

По моему — нет. допустим в среде размер указателей 32 бита. end_buf может указывать на адрес 2147483647 (или не может?), а так как while(buf<=end_buf) и после buf инкрементируется то, он всегда будет меньше либо равно end_buf.

Но можно переписать так:

while (buf <= end_buf)
{
    if (*buf == ' ')
        count_space_symbols ++;

    if (buf == end_buf)
        break;

    buf ++;
}


но увеличивается время выполнения программы. что не хорошо.
придется делать так?:

size_t len = strlen(buf);
for(size_t index=0; index<len; index++) {
   if (buf[index] == ' ')
        count_space_symbols ++;
}


Все верно?


или может можно как-то обойтись без "индексов"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.