【发布时间】:2017-05-30 15:03:52
【问题描述】:
我有一个简单的问题,我似乎无法在任何地方找到答案。
当我为两个字符分配了足够的内存时,为什么这段代码可以编译和工作,“he”、“hellos”应该无法容纳?
它打印出正确的长度,即 6。
免费的没有错误。
char* testF() {
char *arr = (char*)malloc(2*sizeof(char));
strcpy(arr, "hellos");
return arr;
}
int main() {
char *arr = testF();
printf("%c%c%c%c%c%c\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]);
printf("Length = %d", strlen(arr));
free(arr);
return 0;
}
【问题讨论】:
-
它没有。这是 UB。
-
见here。
-
UB是什么意思?
-
你很幸运(如果在某些情况下你认为你的代码没有错误,那么你就很不幸)。在许多情况下,程序会崩溃/出现分段错误。
-
@Lurr 未定义行为