gpt4 book ai didi

PostgreSQL 说明

转载 作者:行者123 更新时间:2023-11-29 11:43:20 29 4
gpt4 key购买 nike

我在 PostgreSQL 中编写了一个函数,其代码如下:


for (i = 0; i < 4; i++) 
{
Datum dat_value = CStringGetDatum(inp->str[0][i]);
values[i] = datumCopy(dat_value,
stats->attrtype->typbyval,
stats->attrtype->typlen);
}

输入字符串是{ALGERIA,ARGENTINA,BRAZIL,CANADA}。该代码针对 ALGERIA、ARGENTINA 运行,但针对 BRAZIL 突然终止。当我调查时,我发现在 datumCopy 函数内部,memcpy 之后的语句没有被打印出来。我检查了 palloc 是否因 (s == NULL) 条件而失败,但这似乎不是原因。我认为 memcpy 失败了。有什么理由吗?谢谢!

Datum
datumCopy(Datum value, bool typByVal, int typLen)
{
Datum res;

if (typByVal)
res = value;
else
{
Size realSize;
char *s;

if (DatumGetPointer(value) == NULL)
return PointerGetDatum(NULL);

realSize = datumGetSize(value, typByVal, typLen);

s = (char *) palloc(realSize);

printf ("Value : %s\n",DatumGetPointer(value));
memcpy(s, DatumGetPointer(value), realSize);
printf ("Not printing \n");
res = PointerGetDatum(s);
}
return res;
}

已编辑:好的,这真的很奇怪。当输入是 {BRAZIL,PAKISTAN,FRANCE} 之一时,代码突然终止。如果我有其他国家(我没有广泛尝试,但有些国家),代码运行正确。

编辑 2:找到原因并纠正问题。如果我们将 C 字符串传递给 datumCopy,我们必须为 typLen 参数传递 -2。我一直错误地传递它。

谢谢!

最佳答案

我已经找到原因并解决了问题。

如果我们将 C 字符串传递给 datumCopy,我们必须为 typLen 参数传递 -2。我一直错误地传递它。

关于PostgreSQL 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24451753/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com