[Duda] programacion en c

Iniciado por gonpiar, 4 Marzo 2012, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

gonpiar

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: !!

armizh

#1
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:
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:
strncpy(cadena2[pos], cadena1, strlen(cadena1));

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

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

Caballo_Alado

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:
♫           ♪ "I'm sexy and I know it"     ♪      ♫

armizh

Cita de: Mr.Brooks 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.
Pero para que hacer un bucle for manejando los punteros si la funcion strncpy ya hace el bucle por nosotros?

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

rir3760

Cita de: 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.
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í:
char *cad;
char *tmp;

cad = malloc(123); /* Solo por decir algo */
tmp = malloc(123); /* Solo por decir algo */

strcpy(cad, "hola");

/* ... */

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language