Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gonpiar en 4 Marzo 2012, 20:02 pm



Título: [Duda] programacion en c
Publicado por: gonpiar en 4 Marzo 2012, 20:02 pm
Buenas  :D , me gustaria preguntar a cualquiera que pueda resolverme esta dudilla:

Tengo la función: void funcion (char** cadena1, int pos, char *caracter)

Se indica que se debe extraer el caracter que hay en la posicion pos de la cadena char** cadena1 e insertarlo en la cadena char* caracter.

Si en lugar
de char** cadena1 y char*caracter tuviésemos char* cadena1 y char caracter, lo único que habría que hacer sería: caracter=cadena[pos];

Pero al haber doble puntero, la manera de acceder a la posicion indicada es con:
caracter=cadena+pos, pero eso me copia desde la posicion pos en adelante.

¿Cómo puedo hacer para indicar mediante un puntero una posición determinada?

Muchas gracias  :silbar: !!


Título: Re: [Duda] programacion en c
Publicado por: armizh en 4 Marzo 2012, 21:31 pm
Puedes usar strncpy, que copia el contenido de una cadena a otra pero dandole una longitud maxima de... lo que tu quieras. Por ejemplo, tienes char *cadena1, que posee 7 caracteres (p.ej. "familia") y lo pasas a **cadena2 en la posicion pos, haces esto:
Código
  1. strncpy(cadena2[pos], cadena1, 7);

Pero esto te restringe a 7 caracteres. Por lo que si tienes a *cadena1, de longitud variable, tienes que hacer:
Código
  1. strncpy(cadena2[pos], cadena1, strlen(cadena1));

Estas funciones estan en la libreria string.h, al igual que strcpy, strcmp, etc etc.

Saludos


Título: Re: [Duda] programacion en c
Publicado por: Caballo_Alado en 4 Marzo 2012, 21:55 pm
Pero a lo mejor precisas hacer el trabajo con solo apuntadores y quizá no llegaste a strncpy, yo creo que el problema esta redactado de forma media confusa :silbar:, a lo mejor si lo que querés es copiar las cadenas como lo hizo armizh, lo mejor es copiar con un bucle for y con arreglos de apuntadores.

para informarte más sobre apuntadores encontré esta pagina que a lo mejor te sirve para entender más sobre el tema:

http://www.fismat.umich.mx/mn1/manual/node11.html

y según tengo entendido no se hacen tareas pero ta ya fue  :rolleyes:


Título: Re: [Duda] programacion en c
Publicado por: armizh en 4 Marzo 2012, 22:43 pm
Pero a lo mejor precisas hacer el trabajo con solo apuntadores y quizá no llegaste a strncpy, yo creo que el problema esta redactado de forma media confusa :silbar:, a lo mejor si lo que querés es copiar las cadenas como lo hizo armizh, lo mejor es copiar con un bucle for y con arreglos de apuntadores.
Pero para que hacer un bucle for manejando los punteros si la funcion strncpy ya hace el bucle por nosotros?

Saludos


Título: Re: [Duda] programacion en c
Publicado por: rir3760 en 4 Marzo 2012, 23:37 pm
Buenas  :D , me gustaria preguntar a cualquiera que pueda resolverme esta dudilla:

Tengo la función: void funcion (char** cadena1, int pos, char *caracter)

Se indica que se debe extraer el caracter que hay en la posicion pos de la cadena char** cadena1 e insertarlo en la cadena char* caracter.
Bien el enunciado esta mal o tal vez ocurrió un error al copiarlo.

Tal como esta "cadena1" no es una cadena en el sentido de ser la dirección en memoria donde se almacena una cadena.

En su lugar es la dirección en memoria de un objeto de tipo "char *". Para explicarlo mejor siguiendo el enunciado ese fragmento seria valido extendiéndolo mas o menos así:
Código
  1. char *cad;
  2. char *tmp;
  3.  
  4. cad = malloc(123); /* Solo por decir algo */
  5. tmp = malloc(123); /* Solo por decir algo */
  6.  
  7. strcpy(cad, "hola");
  8.  
  9. /* ... */
  10.  
  11. funcion(&cad, 3, tmp);
Con ello la intención sera copiar (de alguna forma) el carácter 'a' en la cadena indicada por el puntero "tmp".

Pero de nuevo no tiene sentido pasar un "char **" para esa operación a menos (como ya comente) que falte algo.

Un saludo