3

そこで、SUB という文字列を渡します。strcmp を使用して「SUB」と比較します。ただし、ifループには入りません。何が悪いのかわからない。これが私のコードの一部です:

char* single;
int singleLen= strlen(inputString);
char singleTemp[singleLen+1];

strcpy(singleTemp, inputString);   //to tokenize without modifying input string
single = strtok(singleTemp, " \r\n");
if (strcmp("SUB", single) == 0){
    if (size_list(stack) < 2){
        fprintf(stderr, "Not enough elements in stack.\n");
        exit(-2);
    }
    x = peek(stack);
    stack = pop(stack);
    y = peek(stack);
    stack = pop(stack);
    stack = push(stack, x-y);
    //increment PC
    PC++;       
    return stack;
}

入力スクリプトに問題がある可能性はありますか? 私はそこにすべて正しいと思います-SUBなどの後に余分な空白はありません。念のため、SUB if ループに入ることができないエラーまでの私のコードを示します。

CONST R0 4 ;A=4
CONST R1 0 ;B=0
CONST R2 0 ;Constant 0 comparison
CONST R4 1
PUSH R2
PUSH R0
SUB        ;ERROR OCCURS HERE
POP R3

前もって感謝します!

編集:ああ!MULでエラーを見つけました。これは、スクリプト自体のフォーマット エラーが原因でした。ご協力ありがとうございました!

4

1 に答える 1

0

フロー全体が表示されないため、追加したコードは意味がありません。

char* single;
int singleLen= strlen(inputString);
char singleTemp[singleLen+1];

おそらく、malloc()を初期化する欠落がsingleあり、その後、strlen()呼び出しが実際のデータに作用するようにデータを読み取る欠落している I/O がいくつかありますか? また、私の意見では、ここで可変長配列を使用する必要はありません (または動的割り当て)。静的なものと、たとえば 512 文字程度の長さの両方にするだけです。

于 2013-04-23T15:05:24.923 に答える