Secure C和大学 – 接受过缓冲区溢出培训
发布时间:2020-12-16 10:38:15 所属栏目:百科 来源:网络整理
导读:我最近在C完成了大学课程.所以我当然缺乏经验. 一些大学倾向于教他们的学生安全编程,or at least some elements.有even a video(取自here). 在C中,复制字符串,据我所知 – strcpy或string.h函数.如何在日常编程中安全地使用它? 你有一些函数,它们处理分配以
我最近在C完成了大学课程.所以我当然缺乏经验.
一些大学倾向于教他们的学生安全编程,or at least some elements.有even a video(取自here). 在C中,复制字符串,据我所知 – strcpy或string.h函数.如何在日常编程中安全地使用它? int main(int argc,char *argv[]) { /* ... */ char prog_name[128]; strcpy(prog_name,argv[0]); /* ... */ } 他们的替代方案是: int main(int argc,char *argv[]) { /* ... */ char *prog_name = (char *)malloc(strlen(argv[0])+1); if (prog_name != NULL) { strcpy(prog_name,argv[0]); } else { /* Couldn't get the memory - recover */ } /* ... */ } 取自这里,2nd example. 但据我所知,这更具挑战性,更多代码,更多工作.为什么没有人改变图书馆本身?或者至少为什么没有人提供安全的替代库或功能,以正确的方式处理这个? 谢谢阅读, 解决方法
Posix函数(几乎在每个系统上都可用)是strdup().如果您不想分配新内存并且已经有一个想要使用的缓冲区,则使用strcpy(),但是您可以更好地了解缓冲区的大小以及字符串是否适合它.如果您不知道字符串是否适合,则strncpy()只复制给定数量的字符.因此,您可以将复制的数量限制为缓冲区大小.
除此之外,还有许多sting库以不同的方式管理字符串大小. 并且因为你标记它C:有std :: string为你做所有的内存管理,并没有给你这些问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |