char*转换为char*的数组

max*_*gir 1 c string pointers

如何在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;
}
Run Code Online (Sandbox Code Playgroud)

Lih*_*ihO 5

你正试图施展char (*) [10],char *以便你可以尝试将其丢回.更简单的是改变你的函数的原型:

int get_domaine(char* domaine[10])
{
    printf("%s ", domaine[0]);
    printf("%s ", domaine[1]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

并在main:

if (get_domaine(domaine_cx))
    printf("Ok");
Run Code Online (Sandbox Code Playgroud)

或者,您可能不会传递任何大小的数组并显式传递其他参数中的大小:

int get_domaine(char* domaine[], int tokens)
{
    int i;
    for (i = 0; i < tokens; ++i)
        printf("%s ", domaine[i]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

并在main:

if (get_domaine(domaine_cx, 2))
    printf("Ok");
Run Code Online (Sandbox Code Playgroud)

如果你真的无法改变原型,那么这个邪恶的演员会做:

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;
}
Run Code Online (Sandbox Code Playgroud)

并且由于数组衰减为指针,在main中你仍然可以做到简单:

if (get_domaine(domaine_cx))
    printf("Ok");
Run Code Online (Sandbox Code Playgroud)