Yo tengo una función encargada de Leer una cadena (un puntero tipo char) y para leerlo lo que hago es pasar un puntero tipo char como parametro y copiar lo de la cadena de la clase al puntero del parametro. En fin la función es la siguiente.
Código C++:
Ver original
#include <iostream> #include <stdio.h> #include <ctype.h> #include <string.h> using namespace std; class Cadena { public: Cadena(); Cadena(const char*); Cadena(int); Cadena(const Cadena &); ~Cadena(); void Asignar(const char*); void Leer(char*); private: char *cad; }; Cadena::Cadena() { cad = NULL; } Cadena::Cadena(int x) { cad = new char[x + 1]; } Cadena::Cadena(const char* temp) { } Cadena::Cadena(const Cadena &temp) { } Cadena::~Cadena() { delete[] cad; } void Cadena::Asignar(const char* temp) { delete[] cad; } void Cadena::Leer(char* c) { int x=0; while (*cad) { *c = *cad; cad++; x++; c++; } cad -= x; c -= x; } int main() { Cadena Txt1("Estoy esperando el Doom 4 desde 2008"); char ty[256]; Txt1.Leer(ty); cout << ty << endl; return 0; }
Lo interesante en esta función es la parte de void Cadena::Leer(char* c).
Como verán, lo que yo trato de hacer es enviar un array de caracteres de 255 lugares disponibles como parametro de la función leer. El puntero del parametro como es por valor iguala su valor a la dirección de memoria inicial del array ty (c = &ty[0]).
Eso lo tenemos claro, el problema es el siguiente, yo con el bucle while copio todos los valores de la cadena de la clase al parámetro (que como esta igualado a una referencia cambia automáticamente los valores del array). Tuve que ir aumentado la posición de memoria del puntero cada vez que fui copiando y al final tuve que restar otra vez la cantidad de veces que aumente la posición de memoria antes de terminar la función... la pregunta es: ¿Hay alguna forma en la que yo pueda volver a la dirección de memoria inicial de un puntero sin tener que llevar la cuenta de cuantas veces la aumente? es decir si puedo volver a señalar a la direccion inicial del array en ambos punteros sin tener que restarles x.
Gracias a todos por su tiempo.