我遇到了以下问题:
我有一个char指针数组
char *opts[] = { "-a", "--append", "-b" };
和存储在
中的命令名称char cmd[] = "ls";
现在我需要计算所有可能的组合,我使用GNU Scientific Library完成并使用计算组合执行命令。
我遇到的问题是如何计算char *传递给system()所需的内存量。
这是我的第一次尝试:
int length = strlen(cmd) * sizeof(char);
for (int i = 0; i < 3; ++i) {
length += strlen(opts[i]) * sizeof(char);
}
嗯,它有效,但我觉得这不是正确/最好的解决方案。我不能将二维数组转换为平面一维数组并获得它的大小(如果我没有错,C中没有多维数组,C只能模仿它们)。
答案 0 :(得分:2)
我不能将二维数组转换为平面一维数组
技术上不正确,但这里不相关,因为你没有二维数组。你有一个值的一维数组,恰好有一个长度。没有保证这些字符串在连续的记忆中,因此不可能一步测量它们的总体sizze。
获得它的方法是获得你想要的价值的唯一途径。
P.S。请注意,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);
}