elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con punteros de tipo char
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con punteros de tipo char  (Leído 1,823 veces)
bsantana

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Ayuda con punteros de tipo char
« en: 10 Enero 2016, 19:04 pm »

Quiero asignar a un arreglo de arrays diferentes palabras, sacadas de un archivo de texto, sé que debo utilizar:

Código:
const char *arregloNombres[10];

Y mi idea es que el arreglo arroje:

arregloNombres[0]="Esteban"
arregloNombres[1]="Alexis"
etc...

Pero al leer el archivo con los nombres de esta manera:
Código:
fscanf(lectura,"%s %s %d", nombre1,nombre2,&aux);
arregloNombres[i]=nombre1; //i va en aumento

Lo unico que hace es dejarme todas las posiciones del arreglo con el mismo nombre.
¿Como puedo dejar una posicion con un nombre especifico obtenido de un archivo sin que despues se modifique?
Saludos


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.516



Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #1 en: 10 Enero 2016, 19:20 pm »

Haces mal la asignación. Cuándo dices lo siguiente
Código
  1. arregloNombres[i]=nombre1;
lo que haces es copiar a la posición i de arregloNombres la dirección de memoria de nombre1. Todo el array tendrá así esa misma posición y cuando lo muestres con printf todas las posiciones del array te mostrarán el dato que contenga nombre1, que será el último dato que has guardado en él.

Solución:
Usa la función strncpy para realizar una copia por valor de la variable nombre. Acuérdate de que antes de eso debes dimensionar la posición i de arregloNombres para dar cabida al dato.


En línea

bsantana

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #2 en: 10 Enero 2016, 19:45 pm »

Solución:
Usa la función strncpy para realizar una copia por valor de la variable nombre. Acuérdate de que antes de eso debes dimensionar la posición i de arregloNombres para dar cabida al dato.

Hola gracias por la respuesta, uso la solución que me diste pero al ejecutar se me cae el programa, en el momento que debería salir del ciclo for
Código:
for(i=0;i<cantidadNombres;i++){
        fscanf(archivoLectura, "%s", nombre);
        strncpy(&arregloNombres[i],nombre,9);
    }

    printf("%s",arregloNombres[0]);
Si es algo de asignación de memoria que no hay, soy medio ignorante, espero tu respuesta!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.516



Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #3 en: 10 Enero 2016, 20:01 pm »

Eso es porqué no has dimensionado la posición i de arregloNombres. Piensa que es solo un puntero y no puedes alojar nada en él.

Puedes resolver eso de dos formas:
Declaras dos dimensiones en arreglonombres:
Código
  1. arregloNombres[10][80];
o dentro del for dimensionas cada posición de arregloNombres de forma dinámica con calloc. Si te decantas por la segunda opción recuerda liberar la memoria asignada por calloc cuándo dejes de usarla.

Dentro del for:
Código
  1. fscanf(lectura, "%s", nombre1);
  2. arregloNombres[i] = calloc(strlen(nombre1) + 1, sizeof(char));
  3. strncpy(arregloNombres[i], nombre1, strlen(nombre1));
  4.  
« Última modificación: 10 Enero 2016, 20:02 pm por MAFUS » En línea

bsantana

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #4 en: 10 Enero 2016, 20:22 pm »

Solucionado con arreglo de dos dimensiones! gracias
En línea

bsantana

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #5 en: 10 Enero 2016, 22:45 pm »

Eso es porqué no has dimensionado la posición i de arregloNombres. Piensa que es solo un puntero y no puedes alojar nada en él.

Puedes resolver eso de dos formas:
Declaras dos dimensiones en arreglonombres:
Código
  1. arregloNombres[10][80];


Hola denuevo, usé esta solución, pero al querer comparar
Código:
fscanf(lectura,"%s",nombre1);
while(arregloNombres[i]==nombre1)

simplemente no cumple la condición, alguna recomendacion?
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.516



Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #6 en: 10 Enero 2016, 23:06 pm »

C no tiene operadores para comparar cadenas de caracteres, por tanto lo que haces es comparar dos direcciones de memoria. Para ello debes usar la función de librería strcmp.
En línea

bsantana

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Ayuda con punteros de tipo char
« Respuesta #7 en: 10 Enero 2016, 23:51 pm »

C no tiene operadores para comparar cadenas de caracteres, por tanto lo que haces es comparar dos direcciones de memoria. Para ello debes usar la función de librería strcmp.

Salió perfect, muchas gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar tipo const char* a char « 1 2 »
Programación C/C++
jorge_hura 15 7,471 Último mensaje 25 Julio 2013, 09:50 am
por Eternal Idol
Ordenar alfabéticamente array de punteros a char (lenguaje C)
Programación C/C++
DanielPy 4 5,506 Último mensaje 7 Enero 2015, 18:42 pm
por rir3760
AYUDA PROGRAMA EN C:No detecta los tipo Char
Programación C/C++
Dayleap 3 1,013 Último mensaje 8 Mayo 2016, 14:27 pm
por Dayleap
Duda con punteros a char en función [lenguaje C]
Programación C/C++
Dano1952 2 829 Último mensaje 2 Junio 2018, 02:01 am
por Dano1952
Ayuda con subcadena de tipo char
Programación C/C++
Beginner Web 9 1,377 Último mensaje 6 Julio 2018, 04:29 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines