@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()
не может?