如何在堆栈上存储函数字符串参数

how to store function string argument on the stack

void test(char arr[]){
        ;
    }
    
int main()
    {
        test("abc");

        return 0;
    }

abc 是一个字符串常量,因此将它传递给函数将使 arr 成为堆上指向 "abc" 的指针,但我希望它在堆栈上(我想做字符串连接)

  1. 如何在堆栈上存储arr
  2. 设置为char arr[3]arr[ (any size) ]也有影响吗?因为我的编译器允许,我没有注意到。

char arr[]char arr[3]char arr[(any size)]在函数参数中意义相同。他们的意思是 char* arr.

参数(指针)arr 通常会放置在堆栈(通常在 x86 上)或寄存器上(通常在 x86-64 上),具体取决于调用约定。

您真正想要做的是将字符串放入堆栈。

这可以通过让调用者将要传递的内容放入堆栈来完成:

void test(char arr[]){
    ;//////////////////////////////////////////
}

int main()
{
    char data[102400] = "abc"; /* allocate enough space for what will be concatenated */

    test(data);

    return 0;
}

或者让函数复制字符串。

#include <string.h>

void test(char arr[]){
    char data[102400];
    strcpy(data, arr);
    ;//////////////////////////////////////////
}

int main()
{
    test("abc");

    return 0;
}