0
這是我的代碼。通過malloc()將4個字節複製到有3個字節的保留內存的位置。根據我的知識,由於內存不足,字符串不會以null結尾。即ABC在堆區中佔3個字節。這裏因爲null沒有在最後printf不能打印q.ptr但打印"ABC"
。這怎麼可能?Printf()不會顯示未定義的行爲,並且不會由null結尾的字符串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct p
{
char *ptr;
};
void main()
{
struct p p,q;
p.ptr="ABC";
q.ptr=(char *)malloc(3*sizeof(char));
strcpy(q.ptr,p.ptr);
printf("%s\n",q.ptr);
}
未定義行爲不需要導致崩潰或分段錯誤或類似的東西。該計劃也可以按預期工作,而不會產生任何問題。但不要每次都依靠這個。有一次,你的程序可能正常工作,但下一次,它可能不會!不惜一切代價避免UB! –
「顯然工作鰭」是「未定義的hebaviour」的一部分。 –