2013-10-20 236 views
1

如何在domaine中从domain_cx中检索数据,一旦我在函数get_domaine(...)中尝试了以下操作,但结果不是预期的结果(0-2而不是0-2 3)。这里是我的代码char *转换为char *

#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

我编辑它,它现在编译。 – maximegir

回答

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"); 
+0

尝试函数声明int ** get_domaine(char * domaine [])**或get_domaine(char ** domaine) – elgonzo

+1

我无法控制签名,不幸的是 – maximegir

+0

因为我知道char *数组的大小将它转换为一个指向char(第一个char)的指针,知道大小,我不能使用它从指针指向char? – maximegir