PostgreSql C ライブラリを使用しており、関数を使用してポインタlibpq
から値を取得できます。PGresult
PQgetvalue
printf
現在、10 ~ 20 列のテーブルがあり、簡単な呼び出しでそれらを印刷したいと考えています。
printf("%s,%s,%s..(so on...)...%s", resA, resB, resC,..., resN);
関数を使用してロードされた文字列はどこresA
にありますか。さて、このアプローチでは 10 ~ 20 個のポインターを宣言する必要があり (単一の printf で出力したい場合)、次のような単純なものを使用するつもりでした。resB
PGgetvalue
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
どこが間違っていますか?私のコードの何か、またはすべての getField 呼び出しが同じメモリへのポインターを返すと仮定した gcc であるため、実際には複数回呼び出していません。
または、printf
関数は最初にすべてのパラメーターを (逆の順序で) 評価してから、実際に関数を呼び出していますか? これが事実である場合(そして私はそうであるに違いない)、私が試みていることを達成するためのより簡単なパターンはありますか?