pro * cとOCIを混合するときに、varcharデータ型の内容をテキスト・データ型にコピーする最も良い方法を教えてください。varcharをテキスト・データ型にコピーする
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <sql2oci.h>
#include <sqlca.h>
#include <oci.h>
#define UNAME_LEN 30
#define PWD_LEN 30
varchar username[UNAME_LEN];
varchar password[PWD_LEN];
varchar tnsname[32];
int main(int argc, char **argv) {
if (argc < 3) {
printf("\nUsage: %s username \n",argv[0]);
exit(-1);
}
strncpy((char *) username.arr, argv[1], UNAME_LEN);
username.len = (unsigned short) strlen((char *) username.arr);
strncpy((char *) password.arr, argv[2], PWD_LEN);
password.len = (unsigned short) strlen((char *) password.arr);
strncpy((char *)tnsname.arr, argv[3], 20);
tnsname.len = (unsigned short) strlen((char *) tnsname.arr);
text *uname ;
text *pwd ;
text *connstr;
strncpy (uname, username.arr,UNAME_LEN);
strncpy (pwd, password.arr,PWD_LEN);
strncpy (connstr,tnsname.arr,32);
printf ("username is %s \n",uname);
printf ("password is %s \n",pwd);
printf ("connstr is %s \n",connstr);
return 0;
}
strncpyを使用して内容をコピーできません。 私はこれを実行すると、私は、出力はスコット虎ORCLであることを期待していたのに対し出力に含まが
**username is ger
password is ger
connstr is ger**
です。
私はこれらのパラメータを使って実行しているためです。
'EXEC SQL BEGIN DECLARE SECTION'ブロックに' username'宣言を入れましたか?今のところ、 'UNAME_LEN' varcharの配列を宣言します。 –
EXEC SQL BEGIN DECLARE SECTIONはそれがなくても動作するので必須ではないことに気付きました。ユーザー名をuname –
にコピーしようとすると、問題の詳細がわかります...ランタイムクラッシュ?コンパイラエラー?リンカのエラー?できるだけ詳細を追加するために質問を編集してください。 –