1

我正在尝试将 C(不是 C++)程序从 GCC 移植到 Visual Studio。

GCC 特定的函数 strdupa() 在这个程序中被广泛使用。有没有办法为 Visual C 实现这个功能。

PS。我知道它使用 alloca() 并且不安全。但它现在在 GCC 上运行得很好,我认为在一个地方实现相同的功能然后改变程序的逻辑更安全。我也不希望性能下降。

4

2 回答 2

3

我将其实现为宏:

#define strdupa(a) strcpy((char*)alloca(strlen(a) + 1), a)

这样它不在函数中,因此分配的字符串不会被过早释放。

于 2020-07-22T11:25:05.877 回答
0

我将其实现为功能的方式。不确定它是否安全,但它似乎有效:

__forceinline char* strdupa(const char* s) {
    return strcpy((char*)_alloca(strlen(s) + 1), s);
}

但我认为宏它比使用 __forceinline 更好

于 2020-07-22T12:01:04.140 回答