当前位置:  开发笔记 > 编程语言 > 正文

execv()和const-ness

如何解决《execv()和const-ness》经验,为你挑选了1个好方法。

我经常在C++中使用execv()函数,但是如果某些参数是在C++字符串中.令我很生气的是我不能这样做:

const char *args[4];

args[0] = "/usr/bin/whatever";
args[1] = filename.c_str();
args[2] = someparameter.c_str();
args[3] = 0;

execv(args[0], args);

这不会编译,因为execv()接受与const char*不兼容的char*const argv []所以我必须使用strdup()将我的std :: strings复制到字符数组,这很痛苦.

有谁知道这个的原因?



1> Chris Jester..:

Open Group Base规范解释了为什么:为了与现有C代码兼容.但是,指针和字符串内容本身都不打算更改.因此,在这种情况下,你可以逃避 - const_cast结果c_str().

引用:

包含有关argv[]envp[]成为常量的语句,以明确未来的语言绑定编写者,这些对象是完全不变的.由于ISO C标准的限制,不可能在标准C中陈述该想法.指定两个级别const- 对exec函数argv[]envp[]参数的限定似乎是自然的选择,因为这些函数不是修改指针数组或函数指向的字符,但这将禁止现有的正确代码.相反,只有指针数组被标记为常量.

之后的表格和文字更具洞察力.但是,Stack Overflow不允许插入表,因此上面的引用应该足以让您在链接文档中搜索正确的位置.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有