● 関数リファレンス

代入式の計算(文字数指定)

    int __stdcall   StrCalc_substitution_n(PSTRCALC_PARAM prm,char *str,int len,int btemp,PPARAM_INFO pinf,int *px,int *py);

引数

引数名意味
prmSTRCALC_PARAM 構造体の実体アドレス
str計算対象の代入式を格納したバッファの先頭アドレス
len計算対象の文字長(バイト数)
btemp変数が新規登録される場合のテンポラリ属性付加フラグ
pinfPARAM_INFO 構造体の実体アドレス(NULL指定可)
px一、二次元配列の場合、指定された横インデックスを格納する領域のアドレス(NULL指定可)
py二次元配列の場合、指定された縦インデックスを格納する領域のアドレス(NULL指定可)

戻り値

正常終了した時は STATUS_NORMAL を返します。
それ以外は状態コード を返します。また、メモリの確保に失敗した場合は STATUS_NOTENOUGHMEM を返します。

説明

str に格納された代入式を計算します。処理内容は関数 StrCalc_substitution と同じですが、str [0] 〜 str [len - 1] の範囲を計算対象とします。
範囲内にヌル文字がある場合は、その位置までを計算対象とします。


テスト.

#include <stdio.h>
#include <string.h>
#include "sc39.h"

void    main(void)
{
    STRCALC_PARAM   prm;
    int             ret;
    char            *str = "param = 1+2+3+4+5X";

    if (!StrCalc_init(&prm)){
        printf("初期化エラー\n");
        return;
    }

    /*
      関数 StrCalc_substitution は末尾ヌルまでを対象とするので、
      このデータではエラーになります。
    */
    ret = StrCalc_substitution(
            &prm,
            str,
            0,
            NULL,NULL,NULL);
    if (ret == STATUS_NORMAL)
        printf("ans. : %.16G\n\n",prm.ans);
    else
        printf("error. %d\n\n",ret); /* STATUS_INVALID_RADIX(-18)を表示 */

    /*
      関数 StrCalc_substitution_n で最後の 'X' を除くように
      指定します。
    */
    ret = StrCalc_substitution_n(
            &prm,
            str,
            strlen(str) - 1, /* 一文字分、少なく指定する */
            0,
            NULL,NULL,NULL);
    if (ret == STATUS_NORMAL)
        printf("ans. : %.16G\n",prm.ans); /* 15 を表示 */
    else
        printf("error. %d\n",ret);

    StrCalc_term(&prm);
}