#include <stdio.h>
#include <string.h>
char lists[10][25];
char name[10];
void main()
{
scanf("%s" , lists[0]);
memcpy(name , lists[0], 25);
printf("%s\n" , name);
}
在上面的代碼我預定義的字符數組「名」的大小爲10。 現在,當我給輸入爲:有關memcpy函數如何運行的說明?
輸入 - abcdefghijklmnopqrstuvwxy
我得到的輸出是相同的字符串:abcdefghijklmnopqrstuvwxy
應該不會輸出爲:abcdefghij?
即使陣列的大小限制爲10,這將如何變得可能?
這是一個* undefined behavior *的例子,這意味着可能發生任何事情。包括程序正常工作。 – klutt
你的代碼在線以外着色,非常基本的UB。如果你想讓它炸燬並重新格式化磁盤,那麼你需要更多的顏色。交換這兩個變量聲明是值得一試的。 –
大多數語言都會阻止程序員寫入數組的末尾。 C沒有。這是你的責任。 – jarmod