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* 字符串长度的?
...全文
2469 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)

33,321

社区成员

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

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