将可变长度的 c 字符串数组作为函数参数传递
Passing variable length array of c strings as function argument
在我的主函数中,我声明了一个可变长度的 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);
}
}
抱歉,我无法 post 我的代码的完整内容。这是一个 class 项目,共享代码的规则非常严格。
无论如何,在第二次迭代时,当 i = 1 时,末尾附近的 strcat() 行抛出 EXC_BAD_ACCESS。据我所知,dec_instruction 是一个有效的 C 字符串,例如任何其他。是什么导致了我的错误?
参数 char **machine_instructions
不表示 char[][11]
类型的二维数组,而是指向 char 指针的指针。这通常用作指向 "array" 指针的指针,但它绝不是字符数组的数组。
因此在您的代码中,machine_instructions[i]
将尝试取消对指向 char 的指针的引用,但您传递的内容包含纯字符而不是指针值。因此 BAD_EXCESS
.
使用char machine_instructions[][11]
应该可以解决问题。
在我的主函数中,我声明了一个可变长度的 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);
}
}
抱歉,我无法 post 我的代码的完整内容。这是一个 class 项目,共享代码的规则非常严格。
无论如何,在第二次迭代时,当 i = 1 时,末尾附近的 strcat() 行抛出 EXC_BAD_ACCESS。据我所知,dec_instruction 是一个有效的 C 字符串,例如任何其他。是什么导致了我的错误?
参数 char **machine_instructions
不表示 char[][11]
类型的二维数组,而是指向 char 指针的指针。这通常用作指向 "array" 指针的指针,但它绝不是字符数组的数组。
因此在您的代码中,machine_instructions[i]
将尝试取消对指向 char 的指针的引用,但您传递的内容包含纯字符而不是指针值。因此 BAD_EXCESS
.
使用char machine_instructions[][11]
应该可以解决问题。