为什么它不起作用......它应该正常工作,对吗? 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);
答案 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;
}
如果你使用第二个选项,请不要忘记使用后的空闲记忆。