我正在尝试将 C(不是 C++)程序从 GCC 移植到 Visual Studio。
GCC 特定的函数 strdupa() 在这个程序中被广泛使用。有没有办法为 Visual C 实现这个功能。
PS。我知道它使用 alloca() 并且不安全。但它现在在 GCC 上运行得很好,我认为在一个地方实现相同的功能然后改变程序的逻辑更安全。我也不希望性能下降。
我正在尝试将 C(不是 C++)程序从 GCC 移植到 Visual Studio。
GCC 特定的函数 strdupa() 在这个程序中被广泛使用。有没有办法为 Visual C 实现这个功能。
PS。我知道它使用 alloca() 并且不安全。但它现在在 GCC 上运行得很好,我认为在一个地方实现相同的功能然后改变程序的逻辑更安全。我也不希望性能下降。
我将其实现为宏:
#define strdupa(a) strcpy((char*)alloca(strlen(a) + 1), a)
这样它不在函数中,因此分配的字符串不会被过早释放。
我将其实现为功能的方式。不确定它是否安全,但它似乎有效:
__forceinline char* strdupa(const char* s) {
return strcpy((char*)_alloca(strlen(s) + 1), s);
}
但我认为宏它比使用 __forceinline 更好