Может быть, не самый эффективный способ, но он правильный и портативный?
int are_overlapping(const char *a, const char *b) {
return (a + strlen(a) == b + strlen(b));
}
Чтобы уточнить: то, что я ищу, - это перекрытие в памяти, а не в фактическом содержимом. Например:
const char a[] = "string";
const char b[] = "another string";
are_overlapping(a, b); // should return 0
are_overlapping(a, a + 3); // should return 1