char *转换为char *的数组

时间:2013-10-20 23:17:06

标签: c string pointers

如果我在函数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;
}

1 个答案:

答案 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");