Zee的LR腳本練習四: 關於函數lr_eval_string

在論壇上有幾個朋友一塊討論。現在整理如下:

在LR中,C的變量和LR的參數是不一樣的。
任何C的變量都不能被LR的函數直接調用。
應該用lr_eval_string來取值。
比如{NewParam}(LR中參數化的變量)直接用這個引用是沒有問題的。
但是如果如下:

  Action()
{
    char a[10];
    strcpy(a,"{NewParam}");
    lr_message(a);
    return 0;
}

這就不對了。 
lr_message(a);就會報錯。
但是寫成lr_message(lr_eval_string(a));就可以。
因爲這裏的值已經取出來了。


再看另一個問題:一個網友說:
Action()
{
    char a[10];
    strcpy(a,"{NewParam}");
    lr_message(lr_eval_string(a));
        if (lr_eval_string(a)[0] == 11) {
                lr_message ("a=%d",a);
        }
        return 0;
}
中的 if (lr_eval_string(a)[0] == 11)不應該通過語法檢查。
其中{NewParam}是參數化的。內容:11.

那下面我來用lr_message ("a=d",lr_eval_string(a)[0]);在if前面打出來看看是什麼。結果打出來是:49(數字1的ascii碼).
也就是說if (lr_eval_string(a)[0] == 11)是判斷1的ascii碼是否等於11.顯示是不相等的。於是這裏的  lr_message ("a=%d",a);就不會執行。

下面我們用另一段代碼來看看:

char *str2="T";
char a[10];
strcpy(a,lr_eval_string("{NewParam}"));

lr_message ("a=%d",lr_eval_string(a)[0]);
lr_message(lr_eval_string(a));
       
if (lr_eval_string(a)[0]== *str2) {
                lr_message ("a=%s",a);
  lr_message ("執行這句!");
        }
結果如下:
Starting action Action.
a=84
T
a=T
執行這句!
Ending action Action.
這裏我的參數是一個大寫的“T”。
我們看到lr_eval_string(a)[0]取到的是大寫字母“T”的ascii碼。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章