我的导师给了我以下功能.所以不要怪我暧昧哈哈
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)
可能的运算符优先级错误:
改成:
if ((third[3] == second[2] + 8) && (second[2] == first[1] + 8))
关于"操作顺序"的维基文章详细介绍了评估优先级.
如果你无法在眨眼间向某人解释,将按照哪种顺序对某个表达式进行评估 - 你应该使用足够多的括号来表示它无关紧要(因为没有优先顺序可以照顾)或者它是如何明显的条款是分开的.
编辑:
仔细观察会让我意识到一些可疑的东西正在发生.你没有增加任何指针.如果你是,你会做类似的事情if ((third[3] == second[2 + 8]) && (second[2] == first[1 + 8]))