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, чтобы он не перезаписывался.