12/08/2006, 01:58
|
| | Fecha de Ingreso: abril-2006 Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses Puntos: 2 | |
Hay errores en la forama que usas los punteros y la forma en que segun tu llamas a tu funcion.
un puntero funciona muy similar a como lo hace una variable comen, la diferencia es su capacidad de desrreferenciarse y otra es que se le puede asignar un array (la direccion de su inicio).
en C las cadenas generalmente se usan como punteros a char aunque podemos tambien usar array de char.
cuando los punteros se usan para manejar cadenas generalmente no se usa la desrreferencia.
C tiene funciones que leen caracteres y que leen cadenas de caracteres, ya sea de la entrada estandar o de ficheros.
getchar(), no lee una cadena sino un solo caracter, por tanto no puedes hacer esto;
char *a;
*a = getchar();
ya que a no tienen una direccion valida, al desrreferencia(*a),probablemente te marque un error de acceso.
lo que si se puede hacer es esto:
char a;
a = getchar();
o
char *a = (char*)malloc(1);
*a = getchar();
cuando hacemos esto(char*) estamos haciendo un casting,
es decir, la funcion malloc retorna un valor de tipo void*
para que podamos asignarlo a un char* tenemos que convertirlo o hacer un casting (char*).
(char**) se usaria para un casting a puntero a puntero a char.
las funciones:
por lo que veo las declaras muy bien, pero no la estas usando bien.
una funcion se usa por su nombre y le pasas por parametros variables declaradas previamente.
no tipos como lo haces.
lo que hace o no la funcion tendrias que explicarlo.
supongo que intentas retornar la suma de los parametros.
si es asi la definicion y uso seria:
char funcion(char e, char f)
{
return e+f;
}
es decir no tienes que usar punteros.
los punteros se usan solo cuando te interese conserbar los cambios dentro de la funcion.
por ejemplo:
void funcion( int a, int b, int* result)
{
*result = a+b;
}
y la usariamos;
int a, b, c;
funcion(a, b, &c);
//c es = al resultado de la suma entre a y b.
sobre cadenas te dire que una cadena no se puede sumar a otra usando el operador de suma(+), sino con la funcion strcat().
para leer una cadena desde el teclado se usa gets()
ejemplo:
char cadena[20];
gets(cadena);
no puedes hacer:
char* cadena;
gets(cadena);
a menos que primero le asignes memoria valida a el puntero cadena;
char* cadena = (char*)malloc(20);
gets(cadena);
fgets() hace lo mismo que gets solo que lee una cadena desde un fichero:
fgets(cadena, numero_de_caracteres_a_leer, fichero);
primero tienes que crear la variable FILE:
FILE* fichero = fopen("unfichero.txt", "r");
char cadena[20];
fgets(cadena, 20, fichero);
por lo general se usa mas la funcion scanf y printfo fscanf y fprinf para lecctura y escritura de la salida y entrada estandar o de ficheros respectivamente.
ya que ademas de leer cadenas puede leer otros tipos como enteros , y de coma flotante.
su uso es:
char cadena[20];
int numero;
scanf("%s %i", cadena, &numero);
hay una serie de indicadores del formato, segun el tipo a leer o escribir.
en tu manual puedes encontrar estos formatos.
en fin, te rrepito, para dejar en claro tus preguntas tendria que darte un pequeño curso de C, y para eso se rrequiere de un buen de lineas.
te aconsejo dejar los punteros para cuando comprendas cosas mas basicas del C, como el uso de los diferentes tipos que maneja el C, las cadenas con arrays y las funciones.
despues de comprender esto te sera mas facil comprender el uso de punteros.
bueno es todo por hoy.
Saludos. |