Foros del Web » Programación para mayores de 30 ;) » Programación General »

punteros char y bidimension en C

Estas en el tema de punteros char y bidimension en C en el foro de Programación General en Foros del Web. Tengo un problema y pues como siempre fui algo malo para los punteros y los chars pues necesito su ayuda. Tengo una funcion que primero: ...
  #1 (permalink)  
Antiguo 27/04/2005, 20:52
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
punteros char y bidimension en C

Tengo un problema y pues como siempre fui algo malo para los punteros y los chars pues necesito su ayuda.

Tengo una funcion que primero:
Define un char bidimencional
char texto[10][256];
En el argumento de la funcion ay que incluir un puntero de tipo char para que ahi se compie el valor.


void funcion(char *out)
{
char text[10][256];
.....proceso.....
memcpy(out, text, sizeof(text));
}

Despues antes de llamar a la funcion pasa esto:

char *pointer;
pointer=(char *)malloc(2560);

funcion(&pointer);

Ahora, lo que necesito es lo siguiente.....

El char tiene dos dimensiones porque la primera contiene letras y el segunda palabras, es decir, text[0][0]; tiene la primer letra de la primer palabra y asi.

el roblema es que al llamar la funcion y todo, cuando quiero imprimir la palabra de esta manera, me sale un error:

puts(&pointer[palabra][0]);
...el put es es un ejemplo, uso otra funcion que funciona casi igual.....
el error:
......" el subíndice requiere una matriz o tipo de puntero"

entonces intente usar solo:
puts(&pointer[palabra]);
pero me da resultados bien extraños.

Primero me pone la palabra bien, luego me pone la palabra sin la primer letra y asi sucesivamente.

Como puedo hacer para que est no pase, y en ves de mostrarme la misma palabra con menos letra, me muestre las demas palabras.

Saludos
  #2 (permalink)  
Antiguo 28/04/2005, 01:19
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
El puntero no entiende de las dimensiones que le diste a tu array, es bastante extraño el metodo pero para poder seguir usandolo podrias hacer algo asi, &pointer[palabra * 256] y asi te apuntaria al comienzo de cada una de las palabras. De cualquier manera me parece que no es muy correcto usar un puntero y llenarlo como si fuera un array bidimencional.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/04/2005, 06:01
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Eternal Idol
El puntero no entiende de las dimensiones que le diste a tu array, es bastante extraño el metodo pero para poder seguir usandolo podrias hacer algo asi, &pointer[palabra * 256] y asi te apuntaria al comienzo de cada una de las palabras. De cualquier manera me parece que no es muy correcto usar un puntero y llenarlo como si fuera un array bidimencional.
Cierto, intenta no mezclar arrays y punteros si es posible.
  #4 (permalink)  
Antiguo 28/04/2005, 17:30
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, intente lo de palabre*256 antes de escribir el post y me salen puros caracteres raros. Y pues si, me imagino que no es buena idea lo punteros y arreglos bidimensionales. Que otro metodo eficiente me recomiendan para poder leer palabras de una rchivo de texto.
Lo que necesito es lo siguiente.
Una funcion que me lea el archivo de texto hasta los epacios(fscanf) y que guarde las palabras en un array y que despues pueda imprimir las palabras por separado.

Quisiera mencionar que tengo una solucion para esto donde usando signos que me idetifiquen cada palabra pueda leerla, por ejemplo #palabra_uno #palabra_2
El problema es que no puedo usar ahorita los signos de ayuda.

Saludos
  #5 (permalink)  
Antiguo 28/04/2005, 20:09
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
que tal, yo hice un metodo hace tiempoque segun yo hace lo que quieres:
solo incluye las librerias
iostream y string

Código:
void CConverter::FileReader(string &texto)
{
	
	// constructor de la clase para lectura de archivos
	// que le pasamos el nombre del cual queremos leer.
	ifstream fp("datos.txt");	

	// si no pudo leerla, que mande un mensaje
	// y se termine el programa
	if(!fp)
	{
		cout << "no se pudo abrir el archivo\n";
		return;
	}	

	
	// declaramos 2 strings auxiliares para leer el contenido del archivo
	string aux;	
	string aux2[100];

	// contara los espacios en blanco que hay en total de todo el enunciado
	int contEspacios = 0;

	// mientras nuestro archivo no llegue al End Of File
	while(!fp.eof())
	{
		// leemos en un string lo que contiene 
		// y va a ser separado por espacios en blanco
		fp >> aux;

		// asignamos a la primera posicion del arreglo auxiliar
		// el primer string
		aux2[contEspacios] = aux;

		// le decimoes que avance una posicion
		contEspacios++;

		// y luego lo concatena con un espacio en blanco
		aux2[contEspacios] = " ";

		// vuelve incrementar el contador para que se pase a la siguiente posicion
		contEspacios++;
		
	}

	// decrementa el contador de espacios para que no este fuera de rango
	contEspacios--;

	// cerramos el archivo
	fp.close();
	

	// copiamos lo que dice el enunciado con todo y espacios en blanco
	// a un string que no sea un arreglo de strings, mediante la concatenacion
	for(int i = 0; i<contEspacios; i++)
	{
		//cout<<aux2[i];
		texto = texto + aux2[i];

	}
espero te sirva.
  #6 (permalink)  
Antiguo 28/04/2005, 20:16
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Muy util, pero necesito que sea ANSI C.
No porque no sepa C++ sino porque el compilador que uso para este proyecto no soporta C++.

Puedo intentar usar ese metodo ne C, voy a intentarlo, de todos modos, mas sugerencias son bienvenidas.

Saludos
  #7 (permalink)  
Antiguo 28/04/2005, 21:36
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
ooops, ni modos
pero pues con con C ansi CREO que nadamas en lugar de usar string usas
char* algo = (char*) malloc(tamano);
y fgets para leer........
  #8 (permalink)  
Antiguo 28/04/2005, 23:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
¿¿Que compilador usas? ¿Existen S.O. sin C++ todavia?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 29/04/2005, 14:38
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
ok, ok, deja explico algo importante del porque no C++.
Estoy desarrollando un proyecto para una consola, osea no OS en si.
Y pues para compilar para esa consola, tube primero que compilar una comilador que compilara para ese CPU y pues el compilador compilado no soporta C++ ahorita, tendria que instalarle el gpp para que tubiera soporte, pero creeme, es mortal intentarlo.

Saludos
  #10 (permalink)  
Antiguo 29/04/2005, 15:42
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
ok, ok, deja explico algo importante del porque no C++.
Estoy desarrollando un proyecto para una consola, osea no OS en si.
Y pues para compilar para esa consola, tube primero que compilar una comilador que compilara para ese CPU y pues el compilador compilado no soporta C++ ahorita, tendria que instalarle el gpp para que tubiera soporte, pero creeme, es mortal intentarlo.

Saludos
¿? Aunque sea una consola, es un SO... Explícate mejor ;)
  #11 (permalink)  
Antiguo 29/04/2005, 21:43
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Ok, estoy haciendo unport de una aplicacion para el dreamcast, entonces para empezar no puedo usar nada que tenga que ver con windwos(ventanas, etc) al menos que use Windows CE( que no voy a usar).
Configurar un compilador para otra consola(cross-compiler) es un relajo bueno, y mas cuando tienes que hacer la libreria de graficos compatible y otras cosas mas.
Entonces hasta ahorita logre poner un compilador en linux y en windows pero que solo compilan C con KOS y SDL.
Es por eso la razon.
De todos modos, si me gusta mas la solucion en C.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:04.