c和指针添加中的char数组

Col*_*lin 0 c

我的导师给了我以下功能.所以不要怪我暧昧哈哈

void step_step_step(char *first, char *second, char *third)
{
    if (third[3] == second[2] + 8 && second[2] == first[1] + 8)
        printf("8: Illinois\n");
    else
                printf("8: ERROR\n");
}
Run Code Online (Sandbox Code Playgroud)

我尝试以这种方式调用该函数:

char *p8_1 = (char*) malloc(sizeof(char)*11);
    char *p8_2 = (char*) malloc(sizeof(char)*11);
    char *p8_3 = (char*) malloc(sizeof(char)*11);
    p8_1[9] = 'u';
    p8_2[2] = p8_1[9];
    p8_2[10] = p8_1[9];
    p8_3[3] = p8_2[10];
    step_step_step(p8_1, p8_2, p8_3);
Run Code Online (Sandbox Code Playgroud)

它会导致打印错误.我在这做错了什么?我不明白为什么当我的其他解决方案没有时,这不起作用:

p8_2[2] = p8_1[1] + 8;
p8_3[3] = p8_2[2] + 8;
step_step_step(p8_1, p8_2, p8_3);
Run Code Online (Sandbox Code Playgroud)

Mor*_*sen 5

可能的运算符优先级错误:

改成: if ((third[3] == second[2] + 8) && (second[2] == first[1] + 8))

关于"操作顺序"的维基文章详细介绍了评估优先级.

如果你无法在眨眼间向某人解释,将按照哪种顺序对某个表达式进行评估 - 你应该使用足够多的括号来表示它无关紧要(因为没有优先顺序可以照顾)或者它是如何明显的条款是分开的.

编辑:

仔细观察会让我意识到一些可疑的东西正在发生.你没有增加任何指针.如果你是,你会做类似的事情if ((third[3] == second[2 + 8]) && (second[2] == first[1 + 8]))

  • 虽然括号可能会增加清晰度,但本身没有运算符优先级问题*. (2认同)