[C con Clase] consulta de archivos
Programante
programante en gmail.com
Jue Ago 7 12:25:21 CEST 2008
ed jadul escribió:
>
> *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*
>
>
> Eso es justo lo que queria saber. Duda resuelta.
>
>
> *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.*
>
>
> No, habia colocado *(*cad[2]) *cuando se lo pasaba a strncmp*, *
>
> Como * *nueva pregunta: Asi *(*cad[2]) *que es lo que estoy diciendo?
*(*cad[2]) es lo que comenté. Queda algo confuso al decir "* en vez de
&", puede parecer que hablo de &(*cad[2])*
El 3er caracter tiene un valor, por ejemplo 65 (una A). Entonces al
hacer *65 estás intentando acceder a lo que haya en la dirección
de memoria 65. A la cual tu programa no tendrá acceso.
> y con **(&cad[2])* ?
Hallas la dirección de memoria del tercer caracter de la cadena, y luego
accedes a esa memoria, con lo que estás accediendo al tercer caracter,
es equivalente a cad[2]
Más información sobre la lista de distribución Cconclase