2014-04-16 84 views
0

缺乏自動取款機,所以我通過貝寶提供$ 0.25給第一個人指出我在這段代碼中做了什麼錯誤 - 我希望這不會違反網站規則或侮辱任何人。我想修改一個函數中的多維數組。它在函數中被修改,但是當範圍返回到主函數時,數組不變。修改二維字符數組傳遞給C中的函數

函數標題不能修改。謝謝你的協助。

void getAlignment(char*s1, char*s2, char*s3, char*aligned[]) 
{ 
    /*********************** 
    Code here which assigns 
    char**tmp to "different" "words" 
    ***********************/ 

printf("tmp in getAlignment function\n"); 
printf("%s %s\n", tmp[0], tmp[1]); // prints "different words", as expected 
    aligned = tmp; 
} 

int main(void) 
{ 
    // skipped some code 

    char** aligned = (char**)malloc(sizeof(char*)*2); 
    aligned[0] = "should"; 
    aligned[1] = "change"; 

    printf("%s %s\n", aligned[0], aligned[1]); // prints "should change", as expected 
    getAlignment(s1, s2, transcript, aligned); // how do i change aligned during this call? 
    printf("%s %s\n", aligned[0], aligned[1]); // prints "should change" 

    return 0; 
} 
+0

你想在getAlignment()函數中做什麼?什麼是預期的輸出? – user207064

+0

這個想法是我在'main'中對齊過的,我想通過指向'getAlignment'方法改變的東西來改變'getAlignment'。 – Rob

回答

1

當你寫裏面getAlignment

aligned = (char**) malloc(2*sizeof(char*)); 

你正在指針GetAlignment::aligned點到了一些新的內存。它不再指向main::aligned指向的內存。當你在這個新的存儲器上操作時,它對main::aligned當前和正在指向的內存沒有任何影響。 (注 - ::不是C語法,但我的意思是消除你的兩個變量,它們在本地範圍內都被稱爲aligned,儘管事實上它們是兩個單獨的變量)。

如果您的意圖是getAlignment中的代碼修改main::aligned指向的內存,則只需刪除上面的行。

如果你的目的是使getAlignment能夠分配新的內存,和main::aligned切換到使用新的內存,那麼你必須按引用傳遞main::aligned(即增加一個間接的函數調用額外的水平)。並且不要忘記free()先前分配的內存。

BTW don't cast malloc

+0

這「指出」我在正確的方向(bu dum pshhh)。請讓我知道你的貝寶,以防你想要小額補償幫助。非常感謝。 – Rob

+0

Idon't使用貝寶...這是邪惡的。反正無論如何都樂意提供幫助 –

0

你並不需要通過aligned = (char**) malloc(2*sizeof(char*));在功能getAlignment再次分配二維數組,因爲你已經在主分配它。

您需要分配陣列中的每個元素像

int alignedStrLen = strlen(s3); 
aligned[0] = malloc((alignedStrLen+1)*sizeof(char)); 
aligned[0][alignedStrLen] = '\0'; 
aligned[1] = malloc((alignedStrLen+1)*sizeof(char)); 
aligned[1][alignedStrLen] = '\0'; 

而且,你應該釋放被malloc分配的內存。

+0

讓我們說'main'我剛剛聲明'char ** aligned' w/out初始化它。這個想法是我想要'getAlignment'函數修改'aligned',而不管'aligned'指向什麼。 – Rob