[C con Clase] Trabajo con punteros, ayuda??

Steven Davidson srd4121 en njit.edu
Mie Nov 3 00:09:31 CET 2010


Hola Luis Mario,

2010/11/2 Luis Mario Niedas Hernández <adarias en estudiantes.uci.cu>

> Hola,buen día. Necesito que me ayuden a comprender el trabajo con punteros
> y sobre todo relacionado con las funciones. Me explico por ejemplo en la
> biblioteca string.h biene el prototipo de una funcion ejemplo :
>
> void *memcpy(void *s1, const void *s2, size_t n);
>
> Mis dudas son:
> 1- Ques lo que devuelve esa función??
> Se vé que debe de ser un puntero, pero, me devuelve el valor o la direccion
> donde está el valor.
>
>
Exacto. La función 'memcpy()' retorna un puntero a 'void', que típicamente
llamamos "puntero genérico".

En el caso de 'memcpy()', ésta retorna 's1'.

2- Si fuese a asignarle el resultado a otro puntero como lo haria??
>
> Ejemplo de lo que quiero saber:
>
>  char *cadena, cadena_2;
>

Casi. Debería ser:

char *cadena, *cadena_2;

o incluso,

char *cadena;
char *cadena_2;

 cadena =  (char *)malloc(20);
>  cadena_2 =  (char *)malloc(20);
>
>  // de esta manera
>  cadena = memcpy(cadena, cadena_2, 20);
>
>
En general, esto es correcto, pero no es aconsejable modificar 'cadena'
porque contiene la dirección de la memoria previamente adjudicada
dinámicamente. No es bueno modificar punteros usados de esta manera.

 // de esta otra
>   memcpy(cadena, cadena_2, 20);
>

Esto es lo usual.

 // o de esta
>  *cadena =  memcpy(cadena, cadena_2, 20);
>
>
Esto es incorrecto. Recuerda que C y C++ son lenguajes FUERTEMENTE
tipificados. Esto significa que los tipos de las entidades deben mantenerse
y concordar en cualesquier operaciones involucradas.

'*cadena' significa que el tipo de 'cadena' debe ser un puntero. El
resultado de esta operación es el tipo del dato apuntado, que en este caso
es 'char'. Como la función 'memcpy()' retorna un puntero a 'char', tenemos
la asignación:

<char> = <char *>

Como puedes ver, los tipos no concuerdan y como tampoco existe una regla
semántica que convierta un 'char *' a un 'char', entonces la sentencia es
incorrecta.

en fin que no sé como puedo concatenar una cadena con otra.
>
>
Si se trata de cadenas, entonces sugiero usar 'strcpy()' o incluso,
'strncpy()' para copiar cadenas de caracteres. Para encadenar, usa
'strcat()' o 'strncat()'. Por ejemplo,

char cad1[] = "hola";
char cad2[] = "mundo";
char resultado[20] = "";

strncat( strcat( strcpy( resultado, cad1 ), " " ), cad2, 20 );


Espero que esto te aclare las dudas.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101102/d8c29dc0/attachment-0001.html>


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