强制在堆栈中分配 char[](字符串)而不是全局分配

use*_*889 5 c++ string stack gcc

我试图强制编译器在堆栈中分配内联字符串:此代码在 .rdata 部分分配字符串:

foo("test");
Run Code Online (Sandbox Code Playgroud)

当此代码在堆栈中分配字符串时:

char szt1[] = "test1";
foo(szt1);
Run Code Online (Sandbox Code Playgroud)

这正是我想要强迫的。

如何强制编译始终在堆栈中分配数组?我正在使用海湾合作委员会。

谢谢

Col*_*nee 4

没有什么好的方法可以做到这一点,并且可能没有太多好的理由希望这种行为。

如果您不希望该字符串存在于数据段中,您可以做的最接近的操作是分配一个自动数组char并向其分配字符,一次一个。

char hello[6] = {};
hello[0] = 'h'; hello[1] = 'e'; hello[2] = 'l'; hello[3] = 'l'; hello[4] = 'o';
Run Code Online (Sandbox Code Playgroud)

  • 您不需要“strcpy()”。`char hello[] = "hello"` 将字符串文字字符存储在数据段中(与您的示例相同),然后在运行时在堆栈上分配数组并将字符复制到数组中。使用“strcpy()”只是一种显式方法,可以执行编译器隐式执行的相同操作。 (3认同)