我如何获得下面的字符串的长度以及数组大小?
char str [] = {};
str[0] = "He"; str[1] = "llo"; str[2] = " Wor"; str[3] ="ld";
我如何将它们存储在多维数组中?所以这个数组看起来像这样:
char strstr [str的大小] [str的字符串长度];
strstr[][]
数组维度应为
1. str 和
的数组元素数量
2. str 中所有字符的数量。在strstr[3][1]
的情况下,这将是“ d ”
如果不首先初始化 str -array,那么这是可能的吗?
[编辑]
我知道,strstr
的第二个维度没有意义。它应该是*str
中每个元素的长度,而不是*str
中字符的完整数量
[/编辑]
答案 0 :(得分:4)
这可能会做你想要的,但这并不是你要求的。
#include <stdio.h>
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
请注意,您只有几种存储阵列数组的可能性。您可以执行此解决方案所做的操作(创建指向数组的指针数组),在大型数组中创建一个“压缩”的数组列表,或者制作一个过大的二维数组。
“压缩”数组采用以下格式:
char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}
这种格式的问题是在第一个元素之后访问任何东西有点棘手,通常涉及线性搜索数组。 (或保留一份单独的地址表......就像第一个解决方案一样)
2-D数组要求您指定所有尺寸,如下所示:
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个字节,因此可以很容易地计算出后面元素的位置。
答案 1 :(得分:2)
在C中声明数组时,除非同时提供初始化值,否则必须声明其大小。这是因为数组按顺序排列在内存中,因此计算机需要知道要留出多少空间。
此外,char str [] = {....}
将声明一个字符数组,而不是字符串的数组。字符串是一个字符数组,因此str
只是一个字符串。
要创建字符串数组,您需要执行以下操作:
char strs[num_of_strings][max_length_of_strings+1];
strcpy(strs[0],"string1");
strcpy(strs[1],"string2");
...
this question对其他选项进行了更深入的讨论。
如果您指定的是max_length_of_strings
,但是从您无法保证的源字符串中复制的内容短于max_length_of_strings
,则您希望使用strncpy
代替strcpy
。在这种情况下,您还需要确保生成的字符串以空值终止,您可以通过循环
strs[i][max_length_of_strings] = '\0';
要获取以null结尾的字符串的长度,请使用函数strlen
。
至于你问题的第二部分,上面应该清楚说明如何创建一个更高维的数组。我会提供更多细节,但我不确定你想要这个阵列做什么。当你说“str中所有字符的数量”时,你的意思是strs
数组中存储的字符串的最大长度?
如果是这样,你不必担心。像我上面解释的那样对你的strs
数组进行编程已经为你提供了这个功能:因为字符串只是char
的数组,所以你可以像索引{{1}一样索引字符串。 }}的
如果上述任何内容不清楚,请告诉我,我会尝试更好地解释它。
答案 2 :(得分:1)
如果你想要一个真正的数组,可以这样:
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");
答案 3 :(得分:0)
要在C中获取字符串的长度,您需要使用strlen
并传递字符串。
int len = strlen(array[0]);