[C con Clase] consulta de archivos

Programante programante en gmail.com
Mie Ago 6 01:02:52 CEST 2008


ed jadul escribió:
>
>         int comparaReg(int cadena1[], int cadena2[])
>
> para comparar posiciones de las cadenas. Yo queria comparar desde la 
> posicion  cad[2] y 2 caracteres mas.
>  
> La cosa es que las llamaba tal cual, pero al compararlas me decia el 
> compilador que no podia hacer algo asi como castear o convertir un int 
> a char*,
Es que tienes mal el prototipo. Aunque sean números, lo que te interesa 
es comparar los caracteres.  int comparaReg(char cadena1[], char cadena2[])
> entonces cuando usaba por ejemplo comparaReg() dentro de ella 
> retornaba el valor de srtncmp()  pero pasandole la direccion de la 
> posicion que queria comparar  "return (strncmp( &cad1[2], & cad2[2], 
> 2) )" .
>  
> al principio no usaba &, pero luego del & no se quejo mas.
>  
> Tengo entendido que asi estoy pasando una direccion de memoria, y 
> seguramente van a ser diferentes posiciones de memoria,  se me habia 
> ocurrido usar un *for *para recorrer las cadenas pero me parecio mejor 
> las funciones de biblioteca.
>  
> Esta bien usarlas asi?, tal vez no entendi bien si se usaban asi,
>  
> yo queria comparar DESDE una determinada posicion en adelante y hasta 
> N caracteres. Entonces yo decia "bueno pero son direcciones, yo quiero 
> comparar el contenido de esa direccion". Sin embargo creo que se 
> quejaba si colocaba * en vez de &.
Sí, lo hiciste bien, aunque por las explicaciones, me parece que por 
casualidad.
cad1 es un puntero a char*. En cambio cad1[2] es el caracter de la 3ª 
posición. &cad1[2] es la dirección de memoria en la que empieza el 3er 
caracter. Que es lo que querías.
Otra opción equivalente sería utilizar aritmética de punteros: cad1 + 2

Si lo que colocases fuera * en vez de & (*cad[2]), estarías accediendo a 
la dirección de memoria que tiene el valor del 3er caracter.
Esto es incorrecto porque en un caracter no podemos almacenar un 
puntero, y además la dirección de memoria que nos daría no estaría 
reservada para nuestro programa, por lo que nos produciría un fallo de 
segmentación.







Más información sobre la lista de distribución Cconclase