Para encontrar la subcadena en un texto dado .. C programm

char *substring(char *text, int position, int length) { int i, j=0; char *temp ; for(i=position-1; i<position+length-1; i++) { temp[j++] = text[i]; } temp[j] = '\0'; return temp; } 

Hola, ¿cuál es el error en el siguiente código? Estoy intentando ejecutar esto en Fedora Machine. Y me está dando un error en tiempo de ejecución “Error de segmentación”. ¿De qué se trata este error … y por qué está dando este error …

Gracias..

Necesitas asignar memoria para temp – actualmente es solo un dangling pointer . Puede usar malloc para esto, pero tenga en cuenta que la persona que llama deberá asegurarse de que este almacenamiento esté posteriormente free d.

Por ejemplo:

 char *substring(const char *text, int position, int length) { char *temp = malloc(length + 1); int i, j; for (i = position, j = 0; i < position + length; i++, j++) { temp[j] = text[i]; } temp[j] = '\0'; return temp; } 

temp no está inicializada.

Significa que su código ha violado alguna restricción establecida por el sistema operativo, en este caso, está escribiendo en la memoria que no tiene derecho a escribir.

Esto se debe a que su variable temp es solo un puntero no inicializado, no contiene la dirección de la memoria donde se le permite escribir.

Si espera escribir caracteres de length + 1 , debe apuntar al menos a tantos bytes de espacio.

Ya que espera devolver la cadena, debe hacerla static (pero eso puede ser peligroso), o asignar el espacio dinámicamente:

 if((temp = malloc(length + 1)) == NULL) return NULL; 

Estoy haciendo una copia de la subcadena en otro puntero, esta es la forma más sencilla de encontrar una subcadena de una cadena dada.

Espero que yo sea de esa manera muy simple de la manera correcta ..

Además, los métodos dados por SysAdmin, parecen ser bastante complejos, pero aún así, estoy atento a la sugerencia … Intentaré aprenderlos también … Pero si puede decirme si he implementado el algoritmo de búsqueda de patrones muy básico correctamente, entonces sería muy amable ..

Gracias..

Si bien la respuesta es obvia, es decir, la temperatura no está inicializada, aquí hay una sugerencia.

Si su intención es encontrar una subcadena en otra cadena, pocas alternativas son,

 1. use C strstr(...) 2. Robin-Karp method 3. Knuth-Morris-Pratt method 4. Boyer Moore method 

Update : Inicialmente, pensé que esta pregunta estaba relacionada con la búsqueda de la subcadena (basada en el título). De todos modos, esto se parece a la implementación de strchr ().

Es obvio, a partir del código, que omitió asignar / inicializar el puntero * temp. Está apuntando a ninguna parte.

O tienes que usar malloc o strdup y hacer el rest. Pero sí, es posible que también desee explorar el uso de strncpy (terminación nula) para simplificar el código.