【发布时间】:2017-10-28 17:38:53
【问题描述】:
#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);
}
在上面的代码中,我将字符数组“name”的大小预定义为 10。 现在,当我将输入输入为:
输入 - abcdefghijklmnopqrstuvwxy
我得到的输出是相同的字符串:abcdefghijklmnopqrstuvwxy
我应该得到输出为:abcdefghij ???
即使数组的大小限制为 10,这如何成为可能?
【问题讨论】:
-
这是一个未定义行为的例子,这意味着任何事情都可能发生。包括正常运行的程序。
-
您的代码在线条之外着色,非常基本的 UB。如果你想让它炸毁并重新格式化磁盘,那么你需要更多的颜色。交换两个变量声明值得一试。
-
大多数语言都阻止程序员写超出数组的末尾。 C 没有。你有责任防止这种情况发生。
-
您可能会在 memcpy 中遇到分段错误,因为您的副本超出范围