Primero, el uso de funciones
1, strstr (a, b);
Determine si b es una subcadena de a, en caso afirmativo, regrese desde el principio de b hasta el final de a
Tales como "abcdefgh" "de"
Devuelve "defgh";
Si no es una subcadena, se devuelve NULL;
2, memcpy (a, b + n, c);
Copie la cadena b de las cadenas c después de la enésima posición en un
(Nota: debe agregar b [c] = '\ 0' después de finalizar la función)
Devuelve una cadena;
Segundo, malloc abre cadenas bidimensionales;
Primero abra un puntero a un puntero de cadena;
char ** arr = ( char **) malloc ( sizeof ( char *) * wordsSize);
Después de determinar la subcadena adecuada para el tema
Abrir un puntero de cadena
arr [cnt] = ( char *) malloc ( sizeof ( char ) * ( strlen (palabras [i]) + 1) );
El código final es el siguiente
1 char ** stringMatching ( char ** palabras, int wordsSize, int * returnSize) { 2 int cnt = 0 ; 3 char ** arr = ( char **) malloc ( sizeof ( char *) * wordsSize); 4 para ( int i = 0 ; i <wordsSize; i ++ ) 5 { 6 for ( int j = 0 ; j <wordsSize; j ++ ) 7 { 8 if (i! = J) 9 { 10 if (strstr (palabras [j], palabras [i])! = NULL) 11 { 12 arr [cnt] = ( char *) malloc ( sizeof ( char ) * (strlen (palabras [i]) + 1 )); 13 memcpy (arr [cnt], palabras [i], strlen (palabras [i]) + 1 ); 14 // Las dos líneas anteriores + 1 son para abrir un espacio más para arr [cnt] almacena el '\ 0' al final de las palabras [i] string 15 // Porque la longitud devuelta por la función strlen es una longitud que no incluye '\ 0' 16 // y el arr devuelto por memcpy después de que la cadena termina El último dígito no es '\ 0' 17 // ¡ Asegúrese de recordar agregar '\ 0'! ! De lo contrario, cruzará la frontera. 18 cnt ++ ; 19 break ; 20 } 21 } 22 } 23 } 24 * returnSize = cnt; 25 return arr; 26 27 28 }
(Espero que la próxima pregunta fácil no copie la tarea  ̄ω ̄)