【发布时间】:2017-08-11 12:49:40
【问题描述】:
我遇到了一家公司提出的两个问题。这两个问题让我很困惑。 谁能帮忙解释一下答案的原因?
-
写出结果。
void Test(void){ char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL){ strcpy(str, “world”); printf(str); } }Ans:它会输出“world”
-
写出结果。
char *GetMemory(void){ char p[] = "hello world"; return p; } void Test(void){ char *str = NULL; str = GetMemory(); printf(str); }Ans:输出未知,因为指针无效。
【问题讨论】:
-
1. UB 2. UB .....
-
第一个问题给出的答案不正确。当您执行约束违规时,您无法预测任何事情。
-
我建议你阅读一下undefined behavior。
-
我不得不嘲笑
strcpy(str, “hello”);后面几行是if(str != NULL) ... -
很明显,它们是用来判断程序员是否知道自己在做什么或者是否是“编写错误的程序员”的技巧问题。任何开始喃喃自语“它会输出这个,因为......”的人都不应该被雇用。