1

如何从 domaine 中的 domain_cx 检索数据,一旦我在函数 get_domaine(...) 我尝试了以下,但结果不是预期的(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;
}
4

1 回答 1

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;
}

并且由于数组衰减为指针,因此您仍然可以做简单的事情:

if (get_domaine(domaine_cx))
    printf("Ok");
于 2013-10-20T23:22:01.263 回答