如果我在函数get_domaine(...)中,如何从域中的domain_cx中检索数据我尝试了以下内容,但结果不是预期的结果(0-2而不是0-2 3)。这是我的代码
#include <stdio.h>
#include <stdlib.h>
int get_domaine(char * domaine)
{
char (*ptr_dom)[10];
ptr_dom = (char (*)[10]) domaine;
printf("%s ", ptr_dom[0]); // will print
printf("%s ", ptr_dom[1]); // will not print even thought there is data.
return 1;
}
int main(int argc,char * argv[])
{
char *domaine_cx[10];
domaine_cx[0] = "0-2";
domaine_cx[1] = "3";
if(get_domaine((char *)*domaine_cx)) printf("Ok");
return EXIT_SUCCESS;
}
答案 0 :(得分:5)
您正试图将char (*) [10]
投射到char *
,以便您可以尝试将其强制转换回来。更简单的是改变你的函数的原型:
int get_domaine(char* domaine[10])
{
printf("%s ", domaine[0]);
printf("%s ", domaine[1]);
return 1;
}
和main
:
if (get_domaine(domaine_cx))
printf("Ok");
或者,您可能无法传递任何大小的数组并明确地在其他参数中传递大小:
int get_domaine(char* domaine[], int tokens)
{
int i;
for (i = 0; i < tokens; ++i)
printf("%s ", domaine[i]);
return 1;
}
和main
:
if (get_domaine(domaine_cx, 2))
printf("Ok");
如果你真的无法改变原型,那么这个邪恶的演员会做:
int get_domaine(char* domaine)
{
char** myEvilPtr = (char**) domaine; // !!! we don't know the size !!!
printf("%s ", myEvilPtr[0]);
printf("%s ", myEvilPtr[1]);
return 1;
}
并且由于数组会衰减为指针,因此在main中你仍然可以做到简单:
if (get_domaine(domaine_cx))
printf("Ok");