Discussion:
duda profunda sobre char * strcpy(char*,const char*)
(demasiado antiguo para responder)
Horacio Castellini
2004-06-11 19:11:21 UTC
Permalink
Holas amigos programadores....

Tengo una duda, que es significativa a la hora de aparcer o no put* bug.

supongamos el siguiente caso... omito las seguridades de rebase...

char **M;
int q=3;
M=(char**)malloc(q*sizeof(char*));

ahora bien supongamos que tengo tres string char de longitud diferente
s,r,t... la operación strcpy automáticamente ejecuta un malloc y puedo
hacer

strcpy(M[0],r)....

ó previamente debo hacer

M[0]=(char*)malloc(strlen(r)*sizeof(char));
M[1]=(char*)malloc(strlen(s)*sizeof(char));
M[2]=(char*)malloc(strlen(t)*sizeof(char));

y luego...

strcpy(M[0],r)....

Se entendió mi duda... Saludos Horacio
Julián Albo
2004-06-11 19:27:47 UTC
Permalink
Post by Horacio Castellini
ahora bien supongamos que tengo tres string char de longitud diferente
s,r,t... la operación strcpy automáticamente ejecuta un malloc y puedo
hacer
strcpy copia una cadena, solamente.
--
Salu2
F
2004-06-12 10:12:16 UTC
Permalink
Post by Horacio Castellini
Holas amigos programadores....
Tengo una duda, que es significativa a la hora de aparcer o no put* bug.
supongamos el siguiente caso... omito las seguridades de rebase...
char **M;
int q=3;
M=(char**)malloc(q*sizeof(char*));
aqui crear una matriz de 3 de char*, es decir de punteros a char, pero no
has reservado memoria para los char en si.
Post by Horacio Castellini
M[0]=(char*)malloc(strlen(r)*sizeof(char));
M[1]=(char*)malloc(strlen(s)*sizeof(char));
M[2]=(char*)malloc(strlen(t)*sizeof(char));
y luego...
strcpy(M[0],r)....
Si debes hacerlo, strcpy requiere que tengas memoria reservada el tamaño
del M[0], del M[1]...

Es mas deber resermar uno mas para cada uno, para incluir el '\0'

Un saludo
F
Iñaki Arenaza
2004-06-12 11:32:45 UTC
Permalink
Horacio> strcpy(M[0],r)....

Ademas de todo lo que te dicen los otros compañeros, _NUNCA_ uses
strcpy. Usa strncpy, que impide (si la usas bien) que tengas
desbordamientos en la copia.

Saludos. Iñaki.

- --
Get PGP/GPG Keys at http://www.escomposlinux.org/iarenaza/pgpkey.php
I use free software / Yo uso software libre
J.A. Gutierrez
2004-06-14 10:17:59 UTC
Permalink
Horacio Castellini <***@fceia.unr.edu.ar> wrote:

: M=(char**)malloc(q*sizeof(char*));

: strcpy(M[0],r)....

: ó previamente debo hacer

: M[0]=(char*)malloc(strlen(r)*sizeof(char));

: strcpy(M[0],r)....


debes reservar memoria; pero ya puestos, en lugar de
malloc+strcpy puedes usar strdup.
--
finger ***@shiva.cps.unizar.es for PGP /
.mailcap tip of the day: / La vida es una carcel
application/ms-tnef; cat '%s' > /dev/null / con las puertas abiertas
text/x-vcard; cat '%s' > /dev/null / (A. Calamaro)
Horacio Castellini
2004-06-14 12:32:58 UTC
Permalink
Post by J.A. Gutierrez
: M=(char**)malloc(q*sizeof(char*));
: strcpy(M[0],r)....
: ó previamente debo hacer
: M[0]=(char*)malloc(strlen(r)*sizeof(char));
: strcpy(M[0],r)....
debes reservar memoria; pero ya puestos, en lugar de
malloc+strcpy puedes usar strdup.
Exelente... esto es lo que buscaba para automatizar la cosa... Gracias..
Horacio

Loading...