strcat不会将字符串附加到字符数组/字符串中

时间:2014-05-15 01:15:20

标签: c append strcat

ld r2
ld r6

所以,基本上对于我们的赋值,我们需要使用C将汇编代码程序转换为十六进制。由于某些原因,对于LD操作,寄存器'所有东西都适用于add和jmp操作。二进制转换(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,这意味着它也应该也是exectuted strcat(binaryArray," Reg2"); 输出:

IT HIT R2!
0010
0010

真的很感谢你的帮助。感谢。

1 个答案:

答案 0 :(得分:0)

在binaryArray构建之后" 0010Reg2"你不打印它,它会被一个新的" 0010"在while循环的顶部。然后所有的ifs都失败了,它就会掉出来。所以你只输出" 0010"复制到binaryArray。你需要在while循环中使用binaryArray做一些事情,所以它不会被覆盖。