繁体   English   中英

存储在函数中创建的二维字符数组

[英]storing 2D char array created in a function

我试图在一个函数中创建二维数组并保留它以供以后使用。 我有这个:

char **add_to_list(char *str) {
    char list[4][7];
    int i = 0;
    while (i < 4) {
        if (i == 1) {
            strcpy(list[i], str);
        }
        else {
            strcpy(list[i], "diff_str");
        }
        i++;
    }
    return list;
}

int main() {
    char **list[4][7];
    char *str = "string";
    **list = add_to_list(str);
}

但是当 add_to_list 返回时,列表不是我所期望的

尝试这个。 我简化了它,因为您使用的是静态分配的矩阵。 我还指出 else 子句中添加的新字符串大于 7。例如。 "diff_str" 它的 8 个字符加上 1 个用于 NULL 终止字节。 结果,我将您的静态分配大小从 7 调整为 9。祝您继续学习 C 语言顺利。

void add_to_list(char ppList[4][9], char *str) {
    int i = 0;
    while (i < 4) {
        if (i == 1) {
            strcpy(ppList[i], str);
        }
        else {
            strcpy(ppList[i], "diff_str"); // this string is 9 chars when
                                           // counting NULL terminating byte
        }
        i++;
    }
}

int main() {
    // adjusted size of bytes used to hold string
    char list[4][9] = {"one", "two", "three", "four"};
    char *str = "string";
    printf("str is %s\n", str);
    printf("list[0] is %s\n", list[0]);
    printf("list[1] is %s\n", list[1]);
    printf("list[2] is %s\n", list[2]);
    printf("list[3] is %s\n", list[3]);
    add_to_list(list, str);
    printf("list[0] is %s\n", list[0]);
    printf("list[1] is %s\n", list[1]);
    printf("list[2] is %s\n", list[2]);
    printf("list[3] is %s\n", list[3]);
}

运行时看起来像这样:

str is string
list[0] is one
list[1] is two
list[2] is three
list[3] is four
list[0] is diff_str
list[1] is string
list[2] is diff_str
list[3] is diff_str

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM