c - strcat 不会将字符串 append 到字符数组/字符串中

标签 c append strcat

ld r2
ld r6

因此,基本上对于我们的作业,我们需要使用 C 将汇编代码程序转换为十六进制。出于某种原因,对于 add、and 和 jmp 操作,一切都适用,对于 LD 操作,寄存器的二进制转换( R1 = 001、R2 = 010 等)不会 append 到名为 binaryArray 的字符数组

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

我有一个 token 循环,它分隔每个操作码和运算符,非常确定这部分可以工作,因为它适用于 add、and 和 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 code> 这意味着它也应该执行 strcat(binaryArray, "Reg2"); 输出:

IT HIT R2!
0010
0010

非常感谢您的帮助。谢谢。

最佳答案

在二进制数组构建“0010Reg2”之后,您不会将其打印出来,并且它会在 while 循环顶部被新的“0010”覆盖。然后所有的 if 都会失败并且它会从 while 中退出。所以你只输出将“0010”复制到binaryArray中的结果。您需要在 while 循环中对 binaryArray 执行一些操作,这样它就不会被覆盖。

关于c - strcat 不会将字符串 append 到字符数组/字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667699/

相关文章:

python - 如何根据特定列连接两个数据框?

c - 如何将元素添加到仅给定 head 的指针列表的末尾?

java - 使用 while()+sleep() 代替信号量或互斥量?

php - 如何制作 PHP 扩展

c++ - OpenGL - 二维纹理贴图

使用不同模式下的文件进行 C 编程?

C 编程,绝对初学者指南 - 第 19 章,strcat() 函数代码无法正常工作

c - strcat C 不打印和 int 到 char*

c - 如何使用strcat()函数?

c - C 中的 vector 崩溃