Mírate la documentación de strstr(), haz el favor ^_^Vale, con strstr() llego a saber que en el string "enunlugardelamancha", el string "la" está en la posición 12. Ahora, cómo hago para copiar un substring de ese string, "mancha", con las posiciones 14-19 del string "enunlugardelamancha"? Ese es mi problema.
printf("%sn", (char*)((unsigned int)ptr + strlen("Ki")));eso es la solucion a?
- No pongas las condiciones del if seguidas, es poco legible, y usa siempre { }, te ahorrarás futuros quebraderos de cabeza.
- Usa NULL, no 0 (tampoco hagas !ptr)
- No uses literales en el código, usa constantes (#define)
Y para los nulos prefiero usar el 0, ¿Para que escribir 4 letras y ocultar lo que en realidad es un puntero nulo?Porque es menos portable. Estás asumiendo que el puntero nulo tiene el valor 0, algo que en otras arquitecturas distintas de Intel no tiene por qué ser así (http://stackoverflow.com/questions/2597142/when-was-the-null-macro-not-0). Por algo existe la constante NULL, que es dependiente de la arquitectura.
Tampoco me hago problema con un if en una sóla linea siempre y cuando sea más rápido de leer.A mí me parece menos legible por el simple hecho de tener distintas estructuras de ifs en todo el programa. Prefiero poner todos los ifs iguales, no veo porqué hay que poner unos ifs de una forma y otros de otra, no ayuda a la legibilidad en mi opinión. Pero vamos, es cuestión de formas y gustos.
printf("%sn", (char*)((unsigned int)ptr + strlen("Ki")));Es parecido a
eso es la solucion a?
Aunque basta con ponert unsigned long intAh, ok. En 32 bits y según mi experiencia sizeof(long) = sizeof(int)
Estas casteando la direccion de memoria, y le sumas 3, que es la longitud de la cadena.Exacto. Hago el cast para que el compilador entienda que no me he equivocado, que efectivamente quiero que a un puntero le sume un entero, pero que luego lo siga considerando un puntero. Y le sumo la longitud de la cadena para posicionarme al final de la cadena que se ha encontrado con strstr().
Entonces, si la direccion de ptr empieza en "0x7fffd1573a20" le sumas 3 quedando: "0x7fffd1573a23"
Es correcto, o me estoy liando?
Entonces recibes a partir de 0x7fffd1573a23 hasta final de linea.Bueno, para seguir hablando de posiciones de memoria, que muestre los caracteres desde 0x7fffd1573a23 hasta que encuentre un byte (o carácter) nulo.
No hay de qué, estamos aquí para compartir lo que sabemos, así que ya sabes, ahora te toca a ti compartir ;) :comp: