C encuentra todas las apariciones de subcadenas

¿Existe una forma eficiente de encontrar todas las apariciones (incluida la superposición) de non const char *str2 en char *str1 y generar la posición de los números de las coincidencias en str1 en C (no en C ++, ya que difiere)?

Su función utilizará strstr() en un bucle while para encontrar la primera coincidencia de str2 en str1 . A continuación, puede imprimir el desplazamiento de ese partido. Continuará la búsqueda en el primer carácter después del partido. Detendrá el bucle cuando strstr() ya no encuentre una coincidencia (señalada por strstr() devuelve NULL).

Si no necesitaba superposición, querría saber la longitud de str2 y comenzar la siguiente búsqueda en el carácter correspondiente más la longitud de str2 .

Usando strstr() dentro de un bucle:

 int get_substr_count(const char * haystack, const char *needle) { int count = 0; const char *tmp = haystack; while( tmp = strstr( tmp, needle)){ printf( "Position: %d\n", (int)(tmp-haystack)); ++count; } return count; }