为何VS上的scanf,strcat,strcpy都要在后面加上_s ?VC不需要。VC和VS还

为何VS上的scanf,strcat,strcpy都要在后面加上_s ?VC不需要。VC和VS还有那些那些像这样的差异

第1个回答  推荐于2016-10-08
scanf和scanf_s是不同的函数,他们接受的参数不同

VS的人觉得scanf对字符串的处理“不安全”,所以搞了一套“安全函数”,这样在缓冲区不够大的时候就可以让程序“光荣地”崩溃(默认行为是让程序非正常退出,个人把它称为崩溃。也可以让程序执行之前设定的函数)

不过也有人认为这一套并不是理想的形式,因为所谓的“安全函数”要让用户传入缓冲区的大小,如果用户乱传反而更严重。这些人的做法是让函数动态分配字符串所需要的内存,返回动态分配的字符串,因为是函数内部动态分配,函数知道需要分配多少,就可以保证缓冲区足够大,不会有下标越界带来的问题,使用者只需要记得在用完字符串之后 free 掉——虽然因为C语言没有显式规定的自动内存管理所以不管怎样做不到不用使用者操心就能完美处理字符串本回答被提问者和网友采纳
相似回答