如何将2d数组的字符串传递给它的函数和打印值?

时间:2018-05-19 17:48:33

标签: c

为什么它不起作用......它应该正常工作,对吗? gcc有这条线的问题,但为什么呢?

  

a href="#" class="nav-tabs-dropdown btn btn-block btn-primary">Tabs/a>
ul id="nav-tabs-wrapper" class="nav nav-tabs nav-pills nav-stacked wells">...

抱歉打扰。我只是个初学者。

render_history(history, 2);

2 个答案:

答案 0 :(得分:3)

  

gcc有这条线的问题,但为什么?

因为类型错误。 char* history[3][4];无法作为char**传递。它们是不兼容的类型。

尝试类似:

#include <stdio.h>

void render_history(char* (*history)[4] , const int entry)
{
   printf("%s\n", history[entry][0]);
} 

int main()
{
    char* history[3][4];

    history[0][0] = "1234";
    history[1][0] = "5678";
    history[2][0] = "9012";

    render_history(history, 2);
    return 0;
}

答案 1 :(得分:1)

如上所述,双指针不等于2D数组。 您还可以使用指向char的指针。 char **history。有了这个,你有几个选择:

1)使用复合文字

#include <stdio.h>

void render_history(const char **history, const int entry)
{
    printf("%s\n", history[entry]);
}

int main(void)
{
    const char **history = (const char *[]) { "1234", "5678", "9012", NULL};
    render_history(history, 2);  
    return 0;
}

如果您以后需要更改数据

2)使用malloc的动态内存分配

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

void render_history(char **history, const int entry)
{
    printf("%s\n", history[entry]);
}

int main(void)
{
    char **history = malloc(3 * sizeof(char *));

    for (int i = 0; i < 3; ++i)
    {
        history[i] = malloc(4 * sizeof(char));
    }

    strcpy(history[0], "1234");
    strcpy(history[1], "5678");
    strcpy(history[2], "9012");
    history[3] = NULL;

    render_history(history, 2);
    return 0;
}

如果你使用第二个选项,请不要忘记使用后的空闲记忆。