2017-04-27 295 views
0

所以我試圖將一個char數組傳遞給一個函數並打印出來然後返回數組。將字符串數組傳遞給使用指針的函數

以下是我的主要功能。我正在做二進制搜索樹但是我只是堅持傳遞一個字符數組。

int main() 
{ 
    BST tree = new_bst(); 
    int noRecords; 
    int tfn; 
    char name[10]; 
    char *test; 

    FILE *fileptr; 
    fileptr = fopen("welfare1.txt", "r"); 
    fscanf(fileptr, "%d", &noRecords); 
    fscanf(fileptr, "%s", name); 
    fscanf(fileptr, "%d", &tfn); 

    insert_bst(&tree, tfn, &name); 
} 

到目前爲止,這裏是插入BST函數。我還沒有實現它,因爲我無法將名稱字段傳遞給我的函數,我使用printf作爲測試來查看它是否工作。

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char *name) 
{ 

    if (self == NULL) 
    { 
     TaxRecordPtr newRecord = new_record(); 


     self = malloc(sizeof *self); 
     self->data = newRecord; 
     self->left = self->right = NULL; 

     printf("%c", name[0]); 
} 
+0

....問題是....? – LPs

+1

'&name'不是'char *'!但簡單的'名稱'衰減到一個... – aschepler

+0

數組只通過引用傳遞,只需'insert_bst(&tree,tfn,name);'''和'BSTNodePtr insert_bst_node(BSTNodePtr self,int n,char name [])'應該爲你工作 –

回答

-1

char數組相當於指向char的指針。 所以引用字符數組時,所需的類型將是一個雙字符指針

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char **name) 

無論如何,有沒有點傳遞一個指向字符數組,你可以只通過該字符數組本身

insert_bst(&tree, tfn, name); 

您不會按值傳遞char數組,因爲數組相當於一個指針。

+0

'name'和'&name'的衰減類型都不是'char **'。 – aschepler

+0

'&name'是一個指向數組的指針,而不是指向字符指針的指針。 **數組和指針是不同的動物**甚至數組可以*衰減*指針... –

0

變化

insert_bst(&tree, tfn, &name); 

insert_bst(&tree, tfn, name); 

除了當它是sizeof或一元&運營商的操作數,或是使用在聲明初始化字符陣列,一個字符串文字「T」類型的「N元素數組」的表達式將被轉換(「衰減」)爲類型「指向T的指針」的表達式,並且表達式的值將是第一個元素的地址o數組。

當調用

insert_bst(&tree, tfn, name); 

表達name不是sizeof或一元&運營商的操作數,因此它「衰變」鍵入char *,其中相匹配的參數的類型在函數定義。

當你調用

insert_bst(&tree, tfn, &name); 

表達name一元&操作者的操作,因此轉換不會發生;相反,表達式的類型是char (*)[10],或者「指向10元素數組的char」,它與函數定義中參數的類型不匹配。