Второй, как правило, предпочтительнее.
Другая популярная форма
for (char* p = something; *p; p++)
{
// ... work with *p
}
Еще один
char* p = something;
char c;
while ((c = *p++))
{
// ... do something with c
}
(дополнительные ()
вокруг назначения необходимы, чтобы некоторые подозрительные компиляторы не выдавали предупреждение о том, что я могу иметь в виду сравнение внутри условия while
)
Действительно, strlen
довольно медленный, потому что он должен пройти всю строку в поисках завершающего 0. Итак, strlen
по существу реализован как
int s = 0;
while (*p++) s++;
return s;
(на самом деле используется немного более оптимизированная версия на ассемблере).
Так что вам следует избегать использования strlen
, если это возможно.