2013-10-20 235 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