la salida es :
5
-1
-1
alguna idea ?
#include <stdio.h>
#include <string.h>
int findstr(char *cadena, char *subcadena, int pos_ini)
{
int i, j;
for(i=pos_ini; cadena[i]!='\0'; i++)
for(j=0; subcadena!='\0' && cadena[i+j]==subcadena[j]; j++)
if(subcadena[j+1]=='\0')
return i+1;
return -1;
}
int main()
{
char cadena[]="c a calar calar comer calar garbanzos";
char subcadena[]= "cala";
printf("%i\n", findstr(cadena, subcadena, 0));
strcpy(subcadena, "calar");
printf("%i\n", findstr(cadena, subcadena, 0));
printf("%i\n", findstr(cadena, subcadena, findstr(cadena, subcadena, 0)));
return 0;
}
mi salida es:
5
5
11
subcadena!='\0'
Qué es eso? Ni siquiera te lanza un warning?
Cita de: 0xDani en 21 Junio 2013, 21:50 PM
subcadena!='\0'
Qué es eso? Ni siquiera te lanza un warning?
Es legal, lo que hace comparar el valor del puntero char con el ASCII de '\0'.
Aunque evidentemente, no es eso lo que quería hacer. Supongo que se le ha olvidado el [j]
siendo sinceros es un code que me pasaron no es ni siquiera hecho por mi aun asi me parecio raro que no funcionara por cierto 0xdani es mas estricto que el mismo compilador :P
Cita de: amchacon en 21 Junio 2013, 23:14 PM
Es legal, lo que hace comparar el valor del puntero char con el ASCII de '\0'.
Aunque evidentemente, no es eso lo que quería hacer. Supongo que se le ha olvidado el [j]
Claro que es legal, por eso le he preguntado si no le lanza un warning, por ejemplo de comparación entre puntero y entero.
Cita de: daryo en 21 Junio 2013, 23:31 PM
por cierto 0xdani es mas estricto que el mismo compilador :P
Pues debe ser poco estricto el compilador xD
Cita de: 0xDani en 22 Junio 2013, 00:17 AMClaro que es legal, por eso le he preguntado si no le lanza un warning, por ejemplo de comparación entre puntero y entero.
No da warning porque es una comparación con 0, y esa comparación si tiene sentido (para comprobar si es un puntero válido).