Всем пример!
чтобы программа никогда не падала — не использовать оператор ++ для указателя?
допустим нам нужно подсчитать сколько пробелов в строке.
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 ++;
}
Все верно?
или может можно как-то обойтись без "индексов"?