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