缺少自动柜员机的钱,因此我想通过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

09-20 22:03