我最近在C完成了大学课程.所以我当然缺乏经验.
一些大学倾向于教他们的学生安全编程,或至少一些元素.还有,即使视频(摘自这里).
在C中,复制字符串,据我所知 - strcpy或string.h函数.如何在日常编程中安全地使用它?你有一些函数,它们处理分配以防止缓冲区溢出?有C的CERT安全编码标准.它提供示例和合规解决方案:
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 */ } /* ... */ }
从这里开始,第二个例子.
但据我所知,这更具挑战性,更多代码,更多工作.为什么没有人改变图书馆本身?或者至少为什么没有人提供安全的替代库或功能,以正确的方式处理这个?
感谢阅读,愿
Posix函数(几乎在每个系统上都可用)是strdup()
.strcpy()
如果您不想分配新内存并且已经有一个想要使用的缓冲区,则会使用它,但是您可以更好地了解缓冲区的大小以及字符串是否适合它.如果您不知道字符串是否适合,那么strncpy()
只需复制给定数量的字符.因此,您可以将复制的数量限制为缓冲区大小.
除此之外,还有许多sting库以不同的方式管理字符串大小.
并且因为你标记了它C++:std::string
有为你做的所有内存管理,并没有给你这些问题.