From: | Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com> |
---|---|
To: | Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> |
Cc: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Problemas al imprimir cadenas de caracteres |
Date: | 2005-04-18 22:43:48 |
Message-ID: | 3e7daec10504181543d19a367@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola Manuel
On 4/18/05, Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> wrote:
> Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com> writes:
>
> > Hola a todos,
>
> No estoy seguro de que quieres hacer pero claramente C no funciona
> como tu piensas :-(
No es nada en especial sólo intentando pasarle una cadena de
caracteres a una función, que un futuro podría ser el nombre de una
tabla que si me serviría.
> > Datum
> > ej2(PG_FUNCTION_ARGS)
> > {
> > int32 x = PG_GETARG_INT32(0);
> > text *t = PG_GETARG_TEXT_P(1);
> > int32 z;
> > int32 new_size = VARSIZE(t) - VARHDRSZ;
> > char *new = (char *) palloc(new_size);
> ^^^^^^^^^^^^^^^
> Necesitas allocar tanta memoria como la necesaria para mantener la
> cadena más uno para poner el '\0', en C este carácter es la marca de
> fin de cadena.
>
> > new = t->vl_dat;
>
> Necesitas copiar char a char la cadena (aqui ya perdiste la referencia
> a la memoria previamente allocada, therefore, memory leak!). Revisa
> memcpy(3) o strcpy(3).
>
> > z = x*8;
> > elog(INFO, "Cadena: %s", new);
> > PG_RETURN_INT32(z);
> > }
> >
Habrá alguna forma de imprimir la variable tipo text directamente? es
que también probé
elog(INFO, "Cadena: %s", t->dat);
y también me salieron caracteres extraños, muchas gracias y saludos.
Juan P. Espino
From | Date | Subject | |
---|---|---|---|
Next Message | Manuel Sugawara | 2005-04-18 22:44:58 | Re: Problemas al imprimir cadenas de caracteres |
Previous Message | Juan Pablo Espino | 2005-04-18 22:21:09 | Problemas al imprimir cadenas de caracteres |