Autor
|
Tema: Ayuda con punteros de tipo char (Leído 3,168 veces)
|
bsantana
Desconectado
Mensajes: 10
|
Quiero asignar a un arreglo de arrays diferentes palabras, sacadas de un archivo de texto, sé que debo utilizar: 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: 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
Mensajes: 1.603
|
Haces mal la asignación. Cuándo dices lo siguiente 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
Mensajes: 10
|
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 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
Mensajes: 1.603
|
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: 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: fscanf(lectura , "%s", nombre1 ); arregloNombres [i ] = calloc(strlen(nombre1 ) + 1, sizeof(char));
|
|
« Última modificación: 10 Enero 2016, 20:02 pm por MAFUS »
|
En línea
|
|
|
|
bsantana
Desconectado
Mensajes: 10
|
Solucionado con arreglo de dos dimensiones! gracias
|
|
|
En línea
|
|
|
|
bsantana
Desconectado
Mensajes: 10
|
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: arregloNombres[10][80];
Hola denuevo, usé esta solución, pero al querer comparar fscanf(lectura,"%s",nombre1); while(arregloNombres[i]==nombre1) simplemente no cumple la condición, alguna recomendacion?
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 10
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pasar tipo const char* a char
« 1 2 »
Programación C/C++
|
jorge_hura
|
15
|
11,437
|
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
|
8,128
|
7 Enero 2015, 18:42 pm
por rir3760
|
|
|
AYUDA PROGRAMA EN C:No detecta los tipo Char
Programación C/C++
|
Dayleap
|
3
|
2,006
|
8 Mayo 2016, 14:27 pm
por Dayleap
|
|
|
Duda con punteros a char en función [lenguaje C]
Programación C/C++
|
Dano1952
|
2
|
1,981
|
2 Junio 2018, 02:01 am
por Dano1952
|
|
|
Ayuda con subcadena de tipo char
Programación C/C++
|
Beginner Web
|
9
|
3,236
|
6 Julio 2018, 04:29 am
por engel lex
|
|