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

C 如何确定字符指针数组元素的总字符长度?,c,memory-management,pointers,C,Memory Management,Pointers,我遇到了以下问题: 我有一个字符指针数组 char *opts[] = { "-a", "--append", "-b" }; 以及存储在中的命令名 char cmd[] = "ls"; 现在我需要计算所有可能的组合,这是我使用GNU科学库完成的,并使用计算组合执行命令 我的问题是如何计算将char*传递到system()所需的内存量 这是我的第一次尝试: int length = strlen(cmd) * sizeof(char); for (int i = 0; i < 3;

我遇到了以下问题:

我有一个字符指针数组

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);
}
int-length=strlen(cmd)*sizeof(char);
对于(int i=0;i<3;++i){
长度+=strlen(选项[i])*sizeof(字符);
}
好吧,它奏效了,但我感觉这不是正确/最佳的解决方案。我不能将二维数组转换成平面的一维数组并得到它的大小吗(如果我没有错的话,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); 
} 
int numelem=sizeof(opts)/sizeof(opts[0]);
对于(int i=0;i
James:谢谢!:)请看我编辑过的答案,其中指出了问题的一个误导性标题…顺便说一句,我也不能保证sizeof(char)等于1-这是作为结果定义的实现,在某些系统上它可能是2…@tommieb75:C标准说:
当[sizeof]应用于具有char类型、unsigned char的操作数时,或签名字符(或其限定版本),结果为1。
So sizeof((未)签名)?char保证为1,在标准C中+1哦,谢谢,这是我完全错了的一点。我认为这个空间是连续的。因为所有的东西最终都映射到了一个一维的内存空间,没有一种语言真正有多维数组。。。