@sharptooth: готово. Или лучше: попробовал.

овленэтот вопрос о следующем коде из SQLite3:

 static int strlen30(const char *z){
    const char *z2 = z;
    while( *z2 ){ z2++; }
    return 0x3fffffff & (int)(z2 - z);
 }

это сопровождаетсяотправить сообщение говоря, что эта функция помогаетint переполняется.

Мне особенно интересна эта часть:

 const char *z2 = z;
 while( *z2 ){ z2++; }

мне этот цикл продвигаетсяz2 доz2 указывает на нулевой терминатор. затемz2-z дает длину строки.

Почему бы не использоватьstrlen() для этой части и переписать так:

return 0x3fffffff & (int)(strlen(z));

Зачем использовать цикл + вычитание вместоstrlen()? Что может делать цикл + вычитание?strlen() не может?