如何在堆栈上存储函数字符串参数
how to store function string argument on the stack
void test(char arr[]){
;
}
int main()
{
test("abc");
return 0;
}
abc
是一个字符串常量,因此将它传递给函数将使 arr
成为堆上指向 "abc"
的指针,但我希望它在堆栈上(我想做字符串连接)
- 如何在堆栈上存储
arr
- 设置为
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;
}
void test(char arr[]){
;
}
int main()
{
test("abc");
return 0;
}
abc
是一个字符串常量,因此将它传递给函数将使 arr
成为堆上指向 "abc"
的指针,但我希望它在堆栈上(我想做字符串连接)
- 如何在堆栈上存储
arr
- 设置为
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;
}