如何将字符串数组转换为char数组数组
How to convert from a string array to a char array array?
我想将一个参数数组传递给exec((函数。当前参数都是字符串。如何将字符串数组转换为char数组的数组?
现在,我正在使用const_cast删除const。代码看起来不好。有更好的解决方案吗?
示例代码看起来像:
void f(const string &dev, const string &status){
char* args[] = {"link", "set", "dev", const_cast<char*>(dev.c_str()),
const_cast<char*>(status.c_str())};
execv("/sbin/ip", args);
}
最好将args
声明为char const*
的数组:
char const* args[] = {"link", "set", "dev", dev.c_str(), status.c_str()};
但是,如果您确实需要char*
而不是char const*
,则如execv
所需的那样,我们需要std::string::data
:
void f(const string &dev_, const string &status_){
// Note: string literals don't convert to char* in C++,
// although some compilers allow it as an extension.
// Declare these as arrays so we can form `char*`s to them:
char link[] = "link";
char set[] = "set";
char dev_lit[] = "dev";
// No choice but to copy the const args:
std::string dev{dev_};
std::string status{status_};
// C++17-specific:
char* args[] = {link, set, dev_lit, dev.data(), status.data()};
execv("/sbin/ip", args);
}
C 17之前,您可以使用&status[0]
而不是status.data()
,即使status.size() == 0
。
代码看起来不好。有更好的解决方案吗?
对于它的价值,使用
char* args[] = {"link", "set", "dev", ... };
开始是错误的。字符串文字可以腐烂到char const*
,而不是char*
。
我建议使用使用strdup
的辅助功能为您提供输入字符串的副本。
char* toArg(std::string const& s)
{
return strdup(s.c_str());
}
并使用
char* args[] = {toArg("link"), toArg("set"), toArg("dev"), toArg(dev), toArg(status)};
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值