arrays - 如何将函数字符串参数存储在堆栈上
问题描述
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;
}
推荐阅读
- shiro - 会话在 SessionListenerAdapter 中过期后重定向到登录页面
- angular - 单击谷歌图表(饼图)切片时显示模式
- java - SecureRandom 在 docker 采用openjdk-tomcat 映像中未按预期工作
- python - 用 C++ 编写的函数在 python 中重载 + 运算符
- dockerfile - 如果第一行是:FROM haproxy:2.3,它在 Dockerfile 中使用的操作系统变体是什么?
- php - 获取每个团队所有 ChampionIds 和 Summoner 名称的数组
- json - 在颤振中将 badJson 转换为 JSON
- python - 使用 Electron 构建虚拟麦克风?
- csv - 在 android 11 中选择 csv 文件
- java - 使用同步时使两个方法在线程中依次运行