#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