- 締切済み
関数の戻り値について
----test.c----------------- id="0001"; number = get_data(id); /* 関数の戻り値を取得したい */ if(strcmp(number, "01") == 0){ /* Aの処理へ */ }else{ /* Bの処理へ */ } ----test.pc---------------- int get_data(char* id){ EXEC SQL BEGIN DECLARE SECTION; VARCHAR tel_no[3]; VARCHAR id_no[5]; EXEC SQL END DECLARE SECTION; strcpy(id_no.arr,id); id_no.len=strlen(id_no.arr); EXEC SQL SELECT tel_number into :tel_no FROM test_tbl WHERE id=:id_no; tel_no.arr[tel_no.len]='\0'; /*取得したtel_noを返したい!!*/ } --------------------------- test.cで引数に"0001"を指定して、get_data関数を コールして、そのget_data関数で受け取った引数で test_tblを検索しtel_numberフィールドの値を test.cに返し、判断文で処理したいと考えています。 ちなみにtest_tblで引数の条件で合致するデータは 必ず1件のみとします。 どのように記述したらいいかわかりません。 アドバイスお願い致します。m(_ _)m
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 get_data は文字列を返すのですね? そうすると、tel_no.arr にNULL 文字をセットして 返す事になりますが、ここで注意があります。 上のソースだと、tel_no 変数はget_data 関数の ローカル変数として宣言されますのでget_data から 復帰すると開放されてしまいます。 → 別の場所でグローバル変数かstatic 変数を宣言して おいて、その変数にtel_no.arr をコピーする。 (当然NULL 文字をセットして下さい。) return 文でtel_no.arr をコピーした変数の アドレスを返すようにする。 でOk です。 文字列を返すのであれば、復帰値ではなくOut パラメータ にした方が楽だと思いますょ。