ここの「配列インターフェイスの例」セクションに示されているサンプル コードを適応させようとしています。
http://orclib.sourceforge.net/doc/html/group_g_bind.html _ _
ここで、文字列の配列 をtab_str
使用しOCI_BindArrayOfStrings
て配置します。
char tab_str[1000][21];
...
OCI_BindArrayOfStrings(st, ":s", (char*) tab_str, 20, 0);
問題は、上記の例ではコンパイル時に配列の長さがわかっているのに対し、プログラムの実行時にデータベースからこの長さをダウンロードする必要があることです。my_tab_str
したがって、文字列の配列を作成して呼び出し、次のコード行に配置したいと思います。
OCI_BindArrayOfStrings(st, ":s", (char*) my_tab_str, 20, 0);
私の質問は、セットアップ方法my_tab_str
ですか?これが私のコードです(を使用してコンパイルされていますgcc -std=C89
):
int i, arraysize;
char person_name[20] = "";
char * my_tab_str;
...
strncpy(person_name, "John Smith", 19);
arraysize = <this value is downloaded from database>;
...
my_tab_str = malloc( arraysize * sizeof(char) * (strlen(person_name)+1) );
for(i=0;i<arraysize;i++) {
strncpy( my_tab_str[i], person_name, strlen(person_name) );
}
目標は、string の配列の各要素に "John Smith" (たとえば 10 バイト) と null 終了文字 (コンパイラによって自動的に追加されると思います) を配置することmy_tab_str
です。
コンパイル警告が表示されます:warning: passing argument 1 of 'strncpy' makes pointer from integer without a cast
/usr/include/string.h:131: note: expected 'char * __restrict__' but argument is of type 'char'
関数OCI_BindArrayOfStrings
はここで説明されていることに注意してください。
http://orclib.sourceforge.net/doc/html/group_g_bind.html#ga502cd4785691b17955f5d99276e48884 _ _
引数として文字列の配列が必要です。実装例については、上記の最初のリンクにあるサンプル コードを参照してください。