c - 结构不安全警告

c - struct unsafe warning

我正在尝试使用结构来制作某种包含学生姓名、编号等的列表。我在尝试构建解决方案并查看是否有错误时遇到的问题,编译器(Visual Studio 2013 ) 告诉我使用 "strcpy_s" 而不是 "strcpy"。而当我这次修复它时,我得到了与字符串字符串大小相关的错误。我到底做错了什么?

#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");

}

Well safe unsafe question is coming because of the buffer over 运行 issue. strcpy 不知道目的地字符的保存能力。这就是它不安全的原因。

strcpy_s( stud.name, 20, "goktug" ); 更安全。在这里我们指定无论我们应该限制在 20 以内,因为目的地能够容纳 20 个字符,包括 NUL 终止字符。

有人可能会争辩说这里的数据正在处理 运行 这并不比目的地太小无法容纳复制的东西的明确消息好,但肯定比缓冲区好超过 运行 个漏洞。如果我们沿着这条线思考,那么我们可以得出结论,我们不应该调用它们,除非我们确定目标可以保存复制的字符串。