From: | Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> |
---|---|
To: | Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com> |
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 21:31:52 |
Message-ID: | m38y3fpy9j.fsf@conexa.fciencias.unam.mx |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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 :-(
> 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);
> }
>
Saludos,
Manuel.
From | Date | Subject | |
---|---|---|---|
Next Message | Juan Pablo Espino | 2005-04-18 22:21:09 | Problemas al imprimir cadenas de caracteres |
Previous Message | aberub | 2005-04-18 21:06:31 | Re: LOG de P0stgres 7.4.3 en Linux |