Re: Problemas al imprimir cadenas de caracteres

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

In response to

Browse pgsql-es-ayuda by date

  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