考虑这段代码:
char* str=NULL;
if(str!=NULL && str[0]=='h')
printf("ok");
验证的第一个条件是 str 不为 NULL。我已尝试编译并运行此代码,但没有出现分段错误。
这意味着代码会在下一条指令中中断 if,因为不需要进一步验证 str[0] 是否等于“h”,因为它是一个与。
但问题是:这是否保证适用于所有编译器?不可能发生编译器出于某种原因生成的汇编代码,首先验证 str 是否等于“h”(导致分段错误),然后检查 str 是否为空?