gpt4 book ai didi

c - 如何遍历 char ** 指针?

转载 作者:行者123 更新时间:2023-12-03 23:31:02 25 4
gpt4 key购买 nike

我有以下代码

struct my_struct {
const char **enjoy;
};

const char * enjy[] = {
"Cricket", "movie", "",
"Ball", "eat", "",
};

static const struct my_struct my_struct_table[1] = {
[0] = {
.enjoy = enjy
}
};

现在我想使用那个最终结构并想使用它进行迭代。
如何使用 my_struct_table[0].enjoy 进行迭代

我想打印 enjy 中的所有字符串多变的。

最佳答案

T是任何类型。处理 T 的数组时大小不一,表示为 T* ,您需要指定如何表示此类数组的结尾。

在更简单的情况下:对于字符串,即 T = char , 数组结尾 char*通常由空字符 \0 表示.因此,您可以将其迭代为:

char* ptr = myString;
for (char c = *ptr; c; c=*++ptr) {
...
}

您遍历所有字符,直到到达 \0 为止。 , 制作表达式 c评估为 false/ 0并打破循环。

字符串的另一种表示是将字符串的长度表示为单独的数字。例如,这是在 Pascal 字符串中完成的。
int size = myStringSize;
for (int idx=0; idx<size; ++idx) {
char c = myString[idx];
}

当您有一个字符串数组(即 T = char* )时,也可以使用这两种方法中的任何一种。您的选择是:
  • 您在 enjoy 中存储了一个特殊的非字符串值。数组设置为 NULL在数组末尾
  • 或者你存储的总大小enjoy数组中的一个单独的值。

  • 你也可以同时使用这两个选项——例如,给 int main(int argc, char** argv) 的参数就是这种情况。 . argc将字符串值的数量存储在 argv 中, 和 argv[argc]保证是 NULL .

    如果您使用第一个选项,则将其迭代为:
    char** ptr = enjoy;
    for (char* c = *ptr; c; c=*++ptr) {
    ...
    }

    如果您使用第二个选项:
    int size = enjoySize;
    for (int idx=0; idx<size; ++idx) {
    char* str = enjoy[idx];
    }

    注意这些在 char** 上迭代的片段的相似性, 用于迭代简单的 char* .

    注意一个值 NULL存储在 enjoy数组不同于存储指向空字符串的指针。后者不应用作数组末尾的标记,因为当将合法的空字符串值添加到您的 enjoy 时,它会导致难以跟踪的错误。大批。

    关于c - 如何遍历 char ** 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435398/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com