C中字符串数组的数组

时间:2016-04-23 05:42:21

标签: c arrays string

在C中,在一个类似于

的数组中
"ad","aasb","asdf","asdfsd"

如何获得不同类型的长度,例如:

  • 获取数组的总大小(在此示例中为3,因为它 包含3个字符串数组)
  • 如何获取此数组中任何数组的大小(例如,大小为 此数组的第二个数组是4,因为第二个数组包含4 元素即"aasb"
  • 如何获取任何数组的单个字符串的大小(例如 第二个数组的第二个字符串的大小(即ViewController)是5)。

2 个答案:

答案 0 :(得分:3)

您可以使用sizeof运算符获取所有尺寸(3 x 4 x 7)的尺寸。

如果您想知道最后一个的长度,请在循环中使用strlen

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

int main(void)
{
    char data[][4][7] = {{"gsga","baf"},{"ad","aasb","asdf","asdfsd"},{"ads","sd","sd"}};
    size_t items1 = sizeof data / sizeof data[0]; /* size of dim 1 */
    size_t items2 = sizeof data[0] / sizeof data[0][0]; /* size of dim 2 */
    size_t iter1, iter2, count, len;

    printf("%zu items\n", items1);
    for (iter1 = 0; iter1 < items1; iter1++) {
        count = 0;
        printf("Item %zu\n", iter1);
        for (iter2 = 0; iter2 < items2; iter2++) {
            len = strlen(data[iter1][iter2]); /* size of dim 3 */
            if (len > 0) {
                printf("\tSubitem %zu: %zu characters\n", iter2, len);
                count++;
            }
        }
        printf("\t%zu subitems\n", count);
    }
    return 0;
}

输出:

3 items
Item 0
    Subitem 0: 4 characters
    Subitem 1: 3 characters
    2 subitems
Item 1
    Subitem 0: 2 characters
    Subitem 1: 4 characters
    Subitem 2: 4 characters
    Subitem 3: 6 characters
    4 subitems
Item 2
    Subitem 0: 3 characters
    Subitem 1: 2 characters
    Subitem 2: 2 characters
    3 subitems

data也可以声明为

char *data[][4] = {{"gsga","baf"},{"ad","aasb","asdf","asdfsd"},{"ads","sd","sd"}};

但是你需要检查NULL以获得(非空)子项的数量:

    for (iter2 = 0; iter2 < items2; iter2++) {
        if (data[iter1][iter2] != NULL) {
            len = strlen(data[iter1][iter2]);
            ...
        }
    }

Full Code

答案 1 :(得分:0)

以下程序打印您提到的值:

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

#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))

int main(void)
{
    const char *A[][4] = {{"gsga", "baf"}, {"ad", "aasb", "asdf", "asdfsd"}, {"ads", "sd", "sd"}};

    printf("%d\n", LEN(A)); /*number of rows*/
    printf("%d\n", LEN(A[0])); /*number of columns*/
    printf("%d\n", (int) strlen(A[1][1]) + 1); /*size of element*/
    return 0;
}