C语言有啥好方法替代标准库里的函数

interface 一样的话,你做不到比strcpy更安全。interface 不一样的话,你必须要修改并编译已有的使用strcpy的代码。而且strcpy在gcc上是个built-in function,你有没有考虑过这一点?最后,为什么不直接用strlcpy,而要去写个山寨的 my_strcpy?
■网友
如果只是要替代个别库函数,可以用动态库注入的方法吧。Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind
■网友
楼主要的应该是这个 __warp
【C语言有啥好方法替代标准库里的函数】 --wrap symbol Use a wrapper function for symbol. Any undefined reference to sym- bol will be resolved to "__wrap_symbol". Any undefined reference to "__real_symbol" will be resolved to symbol. This can be used to provide a wrapper for a system function. The wrapper function should be called "__wrap_symbol". If it wishes to call the system function, it should call "__real_symbol". Here is a trivial example: void * __wrap_malloc (size_t c) { printf ("malloc called with %zu\", c); return __real_malloc (c); } If you link other code with this file using --wrap malloc, then all calls to "malloc" will call the function "__wrap_malloc" instead. The call to "__real_malloc" in "__wrap_malloc" will call the real "malloc" function. You may wish to provide a "__real_malloc" function as well, so that links without the --wrap option will succeed. If you do this, you should not put the definition of "__real_malloc" in the same file as "__wrap_malloc"; if you do, the assembler may resolve the call before the linker has a chance to wrap it to "malloc".

■网友
你也许需要这个:http://safeclib.sourceforge.net/或者这个slibc - Implementation of C11 Annex K "Bounds-checking interfaces" ISO/IEC 9899:2011提供strcpy_s系列函数


    推荐阅读