传递可变长度的c字符串数组作为函数参数

时间:2017-09-14 19:40:30

标签: c exc-bad-access c-strings

在我的main函数中,我声明了一个c字符串的可变长度数组,然后将它传递给一个名为secondPass()的函数

在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 个答案:

答案 0 :(得分:1)

参数char **machine_instructions不表示类型为char[][11]的2D数组,而是指向指向char的指针。这通常用作指向指针“数组”的指针,但它永远不是字符数组的数组。

因此,在您的代码中,machine_instructions[i]将尝试取消引用指向char的指针,但您传递的内容包含普通字符而不是指针值。因此BAD_EXCESS

使用char machine_instructions[][11]可以解决问题。