缺少自动柜员机的钱,因此我想通过Paypal向第一人提供0.25美元,以指出我在此代码段中做错的事情-我希望这不会违反网站规则或侮辱任何人。
我想在函数中修改多维数组。在函数中会对其进行修改,但是当范围返回到主函数时,数组将保持不变。
功能标头无法修改。谢谢你的协助。
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;
}
最佳答案
当您在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。