C中的字符数组赋值错误

时间:2014-06-01 22:04:11

标签: c error-handling

我有一些代码用于读取从文件中读取的字符数组中的前3个字符,然后它正在工作而不会改变任何东西停止工作。 '命令' char数组用于保存"和"但现在经常持有"add▒"有时"和0"但是我只宣称它长了3个,但仍然设法保持更多。是否有一些我缺少的背景?

//原来这个工作

    for (i = 0; i < 3; i++){
        command[i] = line[i];
    }

    /*Interpret AND or ADD or JMP */
    if (strcmp(command,"and") == 0){
        hexLine[0] = changeHex(5);
    }else if (strcmp(command,"add") == 0){
            hexLine[0] = changeHex(1);
    }else if (strcmp(command,"jmp") == 0){
            hexLine[0] = changeHex(12);
    }
    printf("%s", command);

//现在没有工作

for (i = 0; i < 3; i++){
    command[i] = line[i];
}

/*Interpret AND or ADD or JMP */

if (strcmp(command,"and") == 0){
    hexLine[0] = changeHex(5);
}else if (strcmp(command,"add") == 0){
    hexLine[0] = changeHex(1);
}else if (strcmp(command,"jmp") == 0){
    hexLine[0] = changeHex(12);
}else if (strcmp(command,"ld ") == 0){
    hexLine[0] = changeHex(2);
}
printf("%s", command);

2 个答案:

答案 0 :(得分:1)

您的for循环会复制3个字符,但不会终止command。所以strcmp不会按照你想要的方式行事。在command[i] = 0;循环后放置for

for (i = 0; i < 3; i++){
    command[i] = line[i];
}

command[i] = `\0';

正如@Klaus在他的评论中指出的那样:上面的for循环假设您总是有3个有效字符要复制。当然,command必须是至少包含4个字符的数组。

答案 1 :(得分:0)

您需要在命令char数组

的末尾放置终结符\ 0
for (i = 0; i < 3; i++){
command[i] = line[i];
}

command[i + 1] = '\0';