我遇到了以下问题:
我有一个字符指针数组

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);
}

10-02 00:52
查看更多