const char* 的长度问题

jzd8000 2017-07-27 11:42:22
在引用别人的库时包含了一大串的字符串常量:
const char* sz1=	“one”;
const char* sz2= “two”;
const char* sz3= “three”;

等等。
现在我的函数如下:
void my(int i,char**pp)
{
int nlen=0;
switch(i)
{
case 1:
nlen=strlen(sz1);
*pp=malloc(nlen+1);
strcpy_s(*pp,nlen+1,sz1);
break;
case 2:
nlen=strlen(sz2);
*pp=malloc(nlen+1);
strcpy_s(*pp,nlen+1,sz2);
break;
case 3:
nlen=strlen(sz3);
*pp=malloc(nlen+1);
strcpy_s(*pp,nlen+1,sz3);
break;
}
}

函数执行没有问题。我现在想问的是,用strlen计算字符串长度,一定增加了系统开销。因为我已经知道了字符串常量的长度,实际在malloc时我是可以一个个数出来长度的。但因为字符串太多工作量也很大,而且也影响程序可读性。有没有宏等可以在预编译或编译阶段就可以计算出const char* 字符串长度的?
...全文
2318 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-07-27
  • 打赏
  • 举报
回复
似乎没办法做到更简单,还有一种笨方法,那就是不用计算字符串常量的长度,每次申请都申请一个足够大的长度(足够大是指比所有字符串常量中长度最大的还要大1);
xskxzr 2017-07-27
  • 打赏
  • 举报
回复 1
当你用const char*类型存储时,就已经损失了长度信息。
bravery36 2017-07-27
  • 打赏
  • 举报
回复
const char mySz1[]= "one"; 手动复制改名
bravery36 2017-07-27
  • 打赏
  • 举报
回复
引用 4 楼 bravery36 的回复:
[quote=引用 2 楼 jzd8000 的回复:] 倒也是个方法。但我这是引用的别人的库,修改了别人的东西会影响通用性吧!还有没有其他方法?
什么都不改就没法了, 直接用sizeof("one")也行, 反正总有些不合适的地方. 你还可以这样子 const char mySz1[]= sz1; sizeof(mySz1)[/quote] 好像想多了, 这种赋值是不可能的.
bravery36 2017-07-27
  • 打赏
  • 举报
回复
引用 2 楼 jzd8000 的回复:
倒也是个方法。但我这是引用的别人的库,修改了别人的东西会影响通用性吧!还有没有其他方法?
什么都不改就没法了, 直接用sizeof("one")也行, 反正总有些不合适的地方. 你还可以这样子 const char mySz1[]= sz1; sizeof(mySz1)
赵4老师 2017-07-27
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
jzd8000 2017-07-27
  • 打赏
  • 举报
回复
倒也是个方法。但我这是引用的别人的库,修改了别人的东西会影响通用性吧!还有没有其他方法?
bravery36 2017-07-27
  • 打赏
  • 举报
回复
const char* sz1改为const char sz1[] 再用sizeof(sz1)
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端中打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,调用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,调用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。六,调用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,调起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧