如何确定char指针数组元素的总字符长度?

时间:2010-02-12 14:36:31

标签: c memory-management pointers

我遇到了以下问题:

我有一个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只能模仿它们)。

1 个答案:

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