Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/04/2016, 08:48
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: problema con punteros dobles

Cita:
Iniciado por aguml Ver Mensaje
¿Para que necesitas que sea un puntero a char*? De por si un char* ya es un puntero a su primera posición. No necesitas para nada retornar un puntero a un char* y además te daría problemas ya que eso significa que el char* lo creas dentro de dicha función y se destruye al salir de esta con lo que podría apuntar a cualquier cosa. Si lo que le pasas es un char* y lo modificas dentro de la función retornará conteniendo lo que le hayas copiado dentro de la funcion. Recuerda que las cadenas no se copian con =, hay que usar strcpy, strncpy, memcpy o similares.
Si para modificar el valor de un int en una función necesitas un int*, para modificar la dirección a la que apunta un puntero necesitas un puntero doble. Con un puntero simple únicamente puedes modificar el contenido de la memoria apuntada pero no que el puntero apunte a otro sitio.

Cita:
Iniciado por braedu555
pero no hayo como asignarle el resto de la cadena a ptrFinal.
Eso es porque te has dejado en el tintero la única posibilidad buena jejeje.

Me explico. Tu has probado con:

Código C:
Ver original
  1. ptrFinal = &ptrN[i];
  2. *ptrFinal = ptrN[i];
  3. &ptrFinal = &ptrN[i];

Si ambos parámetros son del mismo tipo, en este caso punteros dobles, la asignación es directa:

Código C:
Ver original
  1. *ptrFinal=*ptrN;

Como en tu caso necesitas desplazar el puntero un offset dado por I entonces tienes que compensar la indirección:

Código C:
Ver original
  1. *ptrFinal=&((*ptrN)[i]);

Los paréntesis ayudan a leer el código: ptrN es un puntero doble, luego (*ptrN) es un puntero a char. (*ptrN)[i] apunta al carácter en cuestión y &((*ptrN)[i]) devuelve la dirección de memoria donde se encuentra dicho carácter.

O también puedes hacer uso de la aritmética de punteros:
Código C:
Ver original
  1. *ptrFinal=(*ptrN)+i;

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.