c - 结构不安全警告

问题描述 投票:-1回答:1

我正在尝试使用struct来制作某种列表,其中包含学生的姓名,编号等。当我尝试构建解决方案并查看是否存在错误时,我遇到问题,编译器(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");

}
c struct strcpy
1个回答
3
投票

由于缓冲区溢出问题,安全性不安全的问题即将到来。 strcpy不知道目的地characeter持有能力。这就是它不安全的原因。

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

有人可能会争辩说,这里的数据被截断了,这并不比目标太小而无法保存复制内容的明确消息好,但肯定比缓冲区溢出漏洞要好。如果我们顺便考虑那条线,我们可以得出结论,除非我们确定目的地可以保存复制的字符串,否则我们不应该调用它们。

© www.soinside.com 2019 - 2024. All rights reserved.