2017-09-14 127 views
0

在我的主要功能,我聲明C字符串的可變長度數組,然後將其傳遞到稱爲secondPass()函數傳遞C字符串中的可變長度數組作爲函數參數

在secondPass(),我運行一個循環,它決定了一個名爲dec_instruction的字符串的內容,然後我嘗試將它添加到我的數組中。

int main(int argc, char *argv[]) { 

    /* Logic to decide num_commands */ 

    char machine_instructions[num_commands][11]; 
    secondPass(machine_instructions, num_commands); 
} 


secondPass(char **machine_instructions, int num_commands){ 
    for(int i = 0; i < num_commands; ++i){ 
     char dec_instruction[11]; 

     /* Logic to decide contents of dec_instruction */ 

     strcat(machine_instructions[i], dec_instruction); 
    } 
} 

對不起,我無法發佈我的代碼的完整內容。這是一個課程項目,關於共享代碼的規則非常嚴格。

無論如何,在第二次迭代時,當i = 1時,接近末尾的strcat()行會拋出EXC_BAD_ACCESS。據我所知,dec_instruction是一個有效的c字符串,與其他字符串一樣。什麼導致我的錯誤?

+1

char **不能指向char [] []'。 'machine_instructions [1]''sizeof(char *)''過去'machine_instructions [0]' –

+0

你應該從你的編譯器得到一個類型錯誤的調用或函數聲明。 – melpomene

+0

'char dec_instruction [11]; ... strcat(machine_instructions [i],dec_instruction);'是一個問題,因爲代碼嘗試將字符串連接到不是_string_的數組。問問你自己,'strcat()'調用之前'dec_instruction []'的內容是什麼? – chux

回答

1

參數char **machine_instructions不表示char[][11]類型的2D陣列,而是指向指向字符的指針的指針。這通常用作指向指針「數組」的指針,但它絕不是一個由chars數組組成的數組。

因此,在您的代碼中,​​會嘗試將指針取消引用到char,但傳遞的內容由純字符而非指針值組成。因此BAD_EXCESS

使用char machine_instructions[][11]應該解決問題。

相關問題