如何获取存储在数组中的字符串长度(C)

  1. 我如何获得下面的字符串的长度,以及数组大小?

    char str [] = {};

    str[0] = "He"; str[1] = "llo"; str[2] = " Wor"; str[3] ="ld"; 
  2. 我如何将它们存储在多维数组中? 所以这个数组看起来像这样:

    char strstr [str的大小] [str的字符串长度];

strstr[][]数组维度应该是
1. str和。数组元素的数量
2. str中所有字符的数量 在strstr[3][1]的情况下,这将是“ d ”。
如果不首先初始化str -array,这是否可能?

[编辑]我看到, strstr的第二个维度没有意义。 它应该是来自*str的每个元素的长度而不是*str [/ edit]中完整的字符数

这可能会做你想要的,但这并不是你要求的。

 #include  char *strs[] = { "foo", "bar", "bazy" }; int main() { printf("%d - %s\n", strlen(strs[0]), strs[0]); printf("%d - %s\n", strlen(strs[1]), strs[1]); printf("%d - %s\n", strlen(strs[2]), strs[2]); return 0; } 

输出 :

 3 - foo 3 - bar 4 - bazy 

请注意,您只有几种存储arrays数组的可能性。 您可以执行此解决方案所做的操作(创建指向数组的指针数组),在大型数组中创建一个“压缩”数组列表,或者制作一个过大的二维数组。


“压缩”数组采用以下格式:

 char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0} 

这种格式的问题是在第一个元素之后访问任何东西有点棘手,并且通常涉及线性搜索数组。 (或保留一份单独的地址表……而不是第一个解决方案)


二维数组要求您指定所有大小,如下所示:

 char strs[3][5] = { "foo", "baz", "baxy" }; int main() { printf("%d - %s\n", strlen(strs[0]), strs[0]); printf("%d - %s\n", strlen(strs[1]), strs[1]); printf("%d - %s\n", strlen(strs[2]), strs[2]); return 0; } 

这可能是在内存中如下所示:

 {f,o,o,\0,*,b,a,z,\0,*,b,a,x,y,\0} (the *'s could be anything, most dependent on your compiler) 

由于编译器知道每个字符串只需5个字节,因此可以轻松计算后面元素的位置。

在C中声明数组时,除非同时提供初始化值,否则必须声明其大小。 这是因为数组按顺序排列在内存中,因此计算机需要知道要留出多少空间。

此外, char str [] = {....}将声明一个字符数组,而不是一个字符串数组。 字符串是一个字符数组,因此str只是一个字符串。

要创建字符串数组,您需要执行以下操作:

 char strs[num_of_strings][max_length_of_strings+1]; strcpy(strs[0],"string1"); strcpy(strs[1],"string2"); ... 

在这个问题上有更深入的讨论其他选项。

如果您正在指定max_length_of_strings但是从源字符串复制时您无法保证短于max_length_of_strings ,则需要使用strncpy而不是strcpy 。 在这种情况下,您还需要确保生成的字符串为空终止,您可以通过循环来执行此操作

 strs[i][max_length_of_strings] = '\0'; 

要获取以null结尾的字符串的长度,请使用函数strlen

至于你问题的第二部分,上面应该清楚地说明如何创建一个更高维的数组。 我会提供更多细节,但我不确定你想要这个arrays做什么。 当你说“str中所有字符的数量”时,你的意思是存储在你的strs数组中的字符串的最大长度?

如果是这样,您不必担心。 像我上面解释的那样对你的strs数组进行编程已经为你提供了这个function:因为字符串只是char的数组,你可以用索引到char的相同方式索引字符串。

如果上述任何内容不清楚,请告诉我,我会尝试更好地解释它。

如果你想要一个实际的数组,像这样:

  char str[4][5]; // holds up to 4 characters in each strcpy(str[0], "He"); strcpy(str[1], "llo"); strcpy(str[2], " Wor"); strcpy(str[3], "ld"); 

要获得C中字符串的长度,您需要使用strlen并传递字符串。

 int len = strlen(array[0]);