我正在使用 PostgreSql C 库libpq
,我可以PGresult
使用函数从指针中获取值PQgetvalue
。
printf
现在,我有一个包含 10-20 列的表,我想通过一个简单的调用将它们打印出来:
printf("%s,%s,%s..(so on...)...%s", resA, resB, resC,..., resN);
使用函数加载resA
的resB
字符串在哪里。PGgetvalue
现在,这种方法需要声明 10-20 个指针(如果我想用一个 printf 打印出来),我打算使用一些简单的东西:
char* getFieldVal(PGresult* res, int row, char* fieldName)
{
static char tmp[1000];
memset(tmp, 0, sizeof(tmp));
// Load data here...
return tmp;
}
然后printf
像这样打电话:
printf("%s,%s,%s..(so on...)...%s",
getField(r, 0, "A"), getField(r, 0, "B"), ... , getField(r, 0, "N"));
但是,该printf
函数的输出表明所有getField
调用都返回从数据库中首先请求的任何内容(在本例中为A
字段的值),即使我已经使用memset
call 删除了前一个字符串(只是为了确定)。
我哪里错了?是在我的代码中,还是 gcc 假设我所有的 getField 调用都返回指向同一内存的指针,所以它实际上并没有多次调用它。
或者,printf
函数是否首先评估所有参数(以相反的顺序),然后实际调用该函数?如果是这种情况(我敢打赌),是否有更简单的模式来实现我正在尝试的目标?