strcat не добавляет строку в массив символов / строку

ld r2
ld r6

Итак, в основном для нашего назначения нам нужно преобразовать программу ассемблера в шестнадцатеричный код с использованием C. Все работает для операций add, и и jmp, по некоторым причинам, для операций LD, двоичного преобразования регистров (R1 = 001, R2 = 010 и т. Д.) Не добавляется в массив символов с именем binaryArray

char binaryArray[20];//stores the machine code

У меня есть токен-цикл, который разделяет каждый из операционных кодов и операторов, я уверен, что эта часть работает, потому что она работает для блоков кода add, и и jmp.

while (token != NULL){
    if (ld == false) break;
    strcpy(binaryArray, "0010");
    if (strcmp(token, "r0") == 0){
        registerCounter++;
        strcat(binaryArray, "000");
    }else if (strcmp(token, "r1") == 0){
        registerCounter++;
        strcat(binaryArray, "001");
    }else if (strcmp(token, "r2") == 0){
        registerCounter++;
        strcat(binaryArray, "Reg2");
        printf("IT HIT R2!\n");
    }else if (strcmp(token, "r3") == 0){
        registerCounter++;
        strcat(binaryArray, "011");
    }else if (strcmp(token, "r4") == 0){
        registerCounter++;
        strcat(binaryArray, "100");
    }else if (strcmp(token, "r5") == 0){
        registerCounter++;
        strcat(binaryArray, "101");
    }else if (strcmp(token, "r6") == 0){
        registerCounter++;
        strcat(binaryArray, "110");
    }else if (strcmp(token, "r7") == 0){
        registerCounter++;
        strcat(binaryArray, "111");
    }
    token=strtok(NULL, delimiters);
}

Для одного из LD инструкции, это имеет R2 как его первый регистр. Поэтому я ожидаю, что результат будет 0010Reg2, но вместо этого он просто печатает как 0010и странная вещь, это также распечатывает IT HIT R2 это означает, что он также должен был выполнять strcat(binaryArray, "Reg2"); Выход:

IT HIT R2!
0010
0010

Буду очень признателен за вашу помощь. Благодарю.

1 ответ

После того, как двоичный массив будет построен "0010Reg2", вы не распечатаете его, и он будет перезаписан новым "0010" в верхней части цикла while. Тогда все if терпят неудачу, и это выпадает из времени. Таким образом, вы выводите результаты только с "0010", скопированным в двоичный массив. Вам нужно что-то сделать с двоичным массивом в цикле while, чтобы он не перезаписывался.

Другие вопросы по тегам