Странное применение циклов
for,
имхо.
for (; *p != '\0'; p++) {
if (*t == *p) ++t;
else break;
}
Если нет внутренних переменных, которые удобно писать в первом блоке, то
while семантически точнее:
while(*p != '\0' && *t == *p) {
p++; t++;
}
или ещё более идиоматично, используя short-circuiting,
while(*p != '\0' && *t++ == *p++) {}
правда тут уже может пострадать читаемость, но это кому как.
Мне всегда казалось, что
for удобен именно тем, что можно эффективно scope-ить переменные счётчиков:
for(int i = 0; ...). Если этого не делать, тогда зачем он?