Windows平台是否有与BSD strndup()等效的原生C API函数?
Windows平台原生C API替代BSD strndup()的方案
Windows平台的原生C标准库没有提供与BSD strndup()完全同名的函数,但可以通过两种方式实现完全等效的功能:
使用CRT内置的
_strndup函数
从Visual Studio 2015开始,微软C运行时库(CRT)提供了_strndup函数,行为和BSDstrndup()完全一致:从输入字符串最多复制n个字符,且始终确保返回的字符串以NUL结尾。使用时需包含<string.h>头文件,示例代码:#include <string.h> #include <stdio.h> #include <stdlib.h> int main() { const char* src = "Hello, Windows!"; char* dst = _strndup(src, 5); if (dst != NULL) { printf("%s\n", dst); // 输出 "Hello" free(dst); // 必须手动释放内存 } return 0; }若使用旧版本VS,需预先定义
_CRT_NON_CONFORMING_STRNDUP宏才能启用该函数。手动组合API实现兼容方案
要兼容更早期的Windows环境,可通过strnlen、malloc和strncpy组合实现:#include <string.h> #include <stdlib.h> char* my_strndup(const char* s1, size_t n) { size_t copy_len = strnlen(s1, n); char* result = malloc(copy_len + 1); if (result == NULL) { return NULL; } strncpy(result, s1, copy_len); result[copy_len] = '\0'; return result; }这段代码先计算实际需要复制的字符数(最多
n个),分配足够内存后复制字符,最后手动添加NUL终止符,完美复刻strndup()的逻辑。
内容的提问来源于stack exchange,提问作者Graham Leggett
相关产品推荐
相关产品推荐

