C-结构不安全的警告



我正在尝试使用struct制作某种列表,以获取学生的名称,号码等。当我尝试构建解决方案并查看是否存在错误时,我的问题是编译器(Visual Studio 2013)告诉我使用" strcpy"的" strcpy_s"。当我修复它时,我会发现与字符串大小相关的错误。我到底在做什么?

#include <stdio.h>
#include<string.h>
struct student
{
char name[20];
char surname[20];
char dep[50];
int Class;
int num;
}stud;
main(void){
strcpy(stud.name, "goktug");
strcpy(stud.surname, "saray");
strcpy(stud.dep, "elektrik");
}

良好安全的不安全问题即将到来,因为在运行问题上的缓冲区。strcpy不了解目的地contaret持有能力。这就是为什么它不安全的原因。

更安全的是strcpy_s( stud.name, 20, "goktug" );。在这里,我们指出,无论我们应该在20的限制中如何,因为Destnation能够拥有20个字符,包括NUL终止字符。

可以说,这里的数据正在被截断,这并不比明确的消息要好,即目的地太小而无法容纳复制的东西,但肯定比缓冲区超支的利用更好。如果我们考虑到那条线,那么我们可以得出的结论是,除非我们确定目的地可以握住复制的字符串。

相关内容

最新更新