【问题标题】:How to find the number of elements in char** array?如何查找 char** 数组中的元素个数?
【发布时间】:2011-04-13 01:00:40
【问题描述】:

我有一个char**形式的字符串数组

我正在努力寻找该数组的长度:

typedef struct _stringArray
{
    int (*Length)(char**);
    char** (*Push)(char**, char*);
    char** (*Pop)(char**, char*);
}StringArray;

StringArray* StringArray_Constructor(void)
{
    StringArray* stringArray = (StringArray *)malloc(sizeof(StringArray));
    stringArray->Push = StringArray_Push;
    stringArray->Pop = StringArray_Pop;
}

char** StringArray_Push(char** array, char* string)
{
    int size = 0; //how to find how many elements in the array object???

    array = realoc(array, (sizeof(char *) * (size + 1));
    array[size] = string;
    return array;
}

任何帮助将不胜感激! 谢谢。

【问题讨论】:

    标签: c pointers char-pointer


    【解决方案1】:

    使用 C,您必须自己跟踪。

    【讨论】:

    • 对大量“你如何找到...的数量...”问题的有效答案。
    【解决方案2】:

    你有几个选择:

    1) 传递一个 size 参数,该参数指示 char **array 的当前大小。

    2) 声明一个结合char **arrayint array_size 的结构(实际上与#1 相同)。

    3) 如果您的数组将始终包含有效指针(即非 NULL),则在末尾创建一个额外元素,该元素始终设置为 NULL。这充当了一个数组终止符,你可以扫描char **array寻找这个终止元素:

    int size;
    
    for (size = 0; array[size] != NULL; size++);
    
    // 'size' is number of valid entries in 'array'.
    

    【讨论】:

      【解决方案3】:

      您无法推断数组的长度,您可以做到这一点的唯一方法是动态地进行。您有一个字符串数组 (char**),因此您有指向数组第一个元素的第一个字符的指针。我们都知道,在 C 语言中,所有字符串都必须使用 '\0' 进行编辑,因此您可以“扫描”数组中的字符串,获取该指针并保存它,然后将其递增直到得到一个 '\0'。下一个指针是下一个字符串的第一个字符,依此类推。

      但这有一个巨大的缺陷:内存并不像看起来那样线性。我的意思是你的第一个字符串可以完全分配在例如地址 0x0010101A,下一个在 0xF0FF0001,所以或者你有一个巨大的字符串 @0x0010101A 或者它们之间有一堆数据而你不知道它们是否是字符串的一部分。

      这就是为什么您需要维护一个计数器来记录您拥有多少个字符串。 :)

      PS:由于这个数字总是大于零,你应该使用unsigned int来输入它。

      【讨论】:

        猜你喜欢
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2015-08-22
        • 2015-11-02
        • 1970-01-01
        相关资源
        最近更新 更多