2014-04-16 87 views
0

缺乏自动取款机,所以我通过贝宝提供$ 0.25给第一个人指出我在这段代码中做了什么错误 - 我希望这不会违反网站规则或侮辱任何人。我想修改一个函数中的多维数组。它在函数中被修改,但是当范围返回到主函数时,数组不变。修改二维字符数组传递给C中的函数

函数标题不能修改。谢谢你的协助。

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; 
} 
+0

你想在getAlignment()函数中做什么?什么是预期的输出? – user207064

+0

这个想法是我在'main'中对齐过的,我想通过指向'getAlignment'方法改变的东西来改变'getAlignment'。 – Rob

回答

1

当你写里面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

+0

这“指出”我在正确的方向(bu dum pshhh)。请让我知道你的贝宝,以防你想要小额补偿帮助。非常感谢。 – Rob

+0

Idon't使用贝宝...这是邪恶的。反正无论如何都乐意提供帮助 –

0

你并不需要通过aligned = (char**) malloc(2*sizeof(char*));在功能getAlignment再次分配二维数组,因为你已经在主分配它。

您需要分配阵列中的每个元素像

int alignedStrLen = strlen(s3); 
aligned[0] = malloc((alignedStrLen+1)*sizeof(char)); 
aligned[0][alignedStrLen] = '\0'; 
aligned[1] = malloc((alignedStrLen+1)*sizeof(char)); 
aligned[1][alignedStrLen] = '\0'; 

而且,你应该释放被malloc分配的内存。

+0

让我们说'main'我刚刚声明'char ** aligned' w/out初始化它。这个想法是我想要'getAlignment'函数修改'aligned',而不管'aligned'指向什么。 – Rob