我遇到了以下问题:
我有一个字符指针数组
char *opts[] = { "-a", "--append", "-b" };
以及存储在
char cmd[] = "ls";
现在我需要计算所有可能的组合,这是我使用GNU科学库完成的,并使用计算组合执行命令。
我的问题是如何计算char*传递到system()所需的内存量。
这是我的第一次尝试:
int length = strlen(cmd) * sizeof(char);
for (int i = 0; i < 3; ++i) {
length += strlen(opts[i]) * sizeof(char);
}
好吧,它起作用了,但我觉得这不是最好的解决方案。我不能把二维数组转换成平面一维数组并得到它的大小吗(如果我没有错的话,C中没有多维数组,C只是模拟它们)。
最佳答案
我不能把二维数组转换成平面一维数组吗
技术上不正确,但这里不相关,因为你没有二维数组。你有一个一维数组的值正好有一个长度。无法保证这些字符串位于连续内存中,因此不可能一步测量它们的总大小。
拥有它是获得你想要的价值的唯一途径。
注:保证sizeof(char)
等于1。
P.P.S虽然我已经记下了tommie75的答案,但我们可以使用其中的一部分:
int numelem = sizeof(opts) / sizeof(opts[0]);
for (int i = 0; i < numelum; ++i)
{
length += strlen(opts[i]) * sizeof(char);
}