Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在字符串数组中查找字符串的总长度_C - Fatal编程技术网

C 如何在字符串数组中查找字符串的总长度

C 如何在字符串数组中查找字符串的总长度,c,C,在以下数组中: ["fix", "cache", "four"]; 是否有方法获取数组中字符的总长度?=3+5+4=12?目前我所做的是将各个字符串的所有长度相加: char * strings[] = {"fix", "cache", "four", NULL}; size_t len_strings = 0; for (int i=0; strings[i] != NULL ;i++) len_strings += strlen(strings[i]); printf("Str

在以下数组中:

["fix", "cache", "four"];
是否有方法获取数组中字符的总长度?=3+5+4=
12
?目前我所做的是将各个字符串的所有长度相加:

char * strings[] = {"fix", "cache", "four", NULL};
size_t len_strings = 0;
for (int i=0; strings[i] != NULL ;i++) 
    len_strings += strlen(strings[i]);

printf("StringLength: %lu\n", len_strings);
// StringLength: 12
还有,为什么不能改为执行以下操作

for (int i=0; *strings != NULL ;i++) {
    len_strings += strlen(*strings++);
}
我可以执行以下操作(但我相信这与执行数组偏移量相同,只是使用了不同的表示法)


这是唯一可能的方法:遍历数组并检查每个字符串

指针增量无效,因为
strings
不是指针。它是一个数组,所以不能执行
array++
。然而,你可以用它来做指针运算。您还可以使用指针来执行最初想要执行的操作:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char * strings[] = {"fix", "cache", "four", NULL};
    char **pointer = strings;
    size_t len_strings = 0;
    for (int i=0; *pointer != NULL ;i++) {
        len_strings += strlen(*(pointer++));
    }

    printf("StringLength: %lu\n", len_strings);
}
就跟

*(array + i)

您必须迭代字符串数组的每个字符串,以获得所有字符串的总长度

strings
是一个
char
指针数组。不能将
++
运算符与
字符串
变量(
*strings++
)一起使用,因为不允许更改数组的地址。如果你想使用指针,你可以这样做

char **p_strs = strings;

for (int i=0; *p_strs != NULL ;i++) {
    len_strings += strlen(*p_strs++);
}
是的,
*(strings+i)
strings[i]
相同。根据C标准#6.5.2.1:

下标运算符[]的定义是E1[E2]与(*(E1)+(E2))相同


谢谢你,我喜欢这个解决方案。您是否能够就地转换它,而不是定义一个新变量,即
(char**)字符串
,或者这是不允许的?@TagC198您可以转换它,但您将如何处理它?你会在那个表达式上使用
++
吗?类似于-
*((char**)字符串)++
。不,那是不允许的。通读左值的概念。标准规定(#6.5.16)-赋值运算符应具有可修改的左值作为其左操作数,从#6.3.2.1开始,可修改的左值是没有数组类型的左值<代码>printf(“字符串长度:%lu\n”,len\u字符串)这将“起作用”,但是
大小的正确格式说明符是
%zu
*(array + i)
char **p_strs = strings;

for (int i=0; *p_strs != NULL ;i++) {
    len_strings += strlen(*p_strs++);
}