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

时间:2013-03-19 15:43:28

标签: c

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

      

    char str [] = {};

         
        str[0] = "He";
        str[1] = "llo";
        str[2] =  " Wor";
        str[3] ="ld";
    
             

      
  2. 我如何将它们存储在多维数组中?所以这个数组看起来像这样:

      

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

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


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

4 个答案:

答案 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;
}

Output

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]);