You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中向要求char**的外部库函数传递字符串字面量的正确方式

解决方法

方案1:使用栈上char数组(推荐,安全无内存分配)

将字符串字面量复制到栈上的非const char数组中,这样可以合法地获取指向char*的指针传递给函数,且无需动态内存分配:

char name[] = "test.exe";
func(&name);

这里的name是栈上分配的数组,类型为char[],会自动退化为char*,完全符合函数func(char**)的参数要求。如果外部函数仅读取字符串内容,这个方案完全安全;如果函数需要修改字符串,只要数组长度足够(这里"test.exe"长度为8,数组会自动分配9个字节存储终止符),也能正常工作。

方案2:使用const_cast(仅当确认函数不修改字符串时使用)

如果不想复制字符串,可以用const_cast移除const限定,但必须确保外部函数func不会尝试修改传入的字符串内容——因为字符串字面量在内存中是只读的,修改会触发未定义行为:

const char* name = "test.exe";
func(const_cast<char**>(&name));

这个方案没有内存分配,但属于“不安全”的妥协手段,仅在你能100%确定func不会修改字符串时使用。

内容的提问来源于stack exchange,提问作者Mickey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:43:17