在C中通过引用正确传递char数组和char指针

时间:2013-03-25 02:58:15

标签: c arrays pointers c-strings

是否有正确的方法来调用char数组和char指针来转到函数,但它是通过引用传递的,它也会被操作?

这样的事情:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void manipulateStrings(char *string1, char *string2[])
{

    strcpy (string1, "Apple");
    strcpy (string2, "Banana");

    printf ("2 string1: %s", string1);
    printf ("2 string2: %s", &string2);

}


int main ()
{
    char *stringA;
    char stringB[1024];

    stringA = (char *) malloc ( 1024 + 1 );

    strcpy (stringA, "Alpha");
    strcpy (stringB, "Bravo");
    printf ("1 stringA: %s", stringA);
    printf ("1 stringB: %s", stringB);

    manipulateStrings(stringA, stringB);

    printf ("3 stringA: %s", stringA);
    printf ("3 stringB: %s", stringB);


    return 0;
}

我不确定我是否正确理解如何将这些变量传递给函数并更改那些碰巧是char / strings的变量的值

编辑:我的问题是 - 你怎么能改变函数中两个字符串的值?

2 个答案:

答案 0 :(得分:11)

在C中没有通过引用传递的东西.C中的所有东西都是通过值传递的。这导致您需要的解决方案;添加另一个间接层。

但是,您的代码还有其他问题。您不需要将指针传递给指针(或指向数组的指针),因为您不会改变输入,只会改变它所引用的内容。您想复制一个字符串。大。你需要的只是一个指向char的指针,初始化为指向足够的内存量。

将来,如果您需要改变输入(即为其分配 new 值),则使用指向指针的指针。

int mutate(char **input) 
{
    assert(input);
    *input = malloc(some_size);
}

int main(void)
{
    /* p is an uninitialized pointer */
    char *p;
    mutate(&p);
    /* p now points to a valid chunk of memory */
    free(p);
    return 0;
}

答案 1 :(得分:0)

您目前正在做:

manipulateStrings(stringA, stringB);

manipulateStrings内打印。相反,为了验证你是否正确地做了,我会这样做:

manipulateStrings(stringA, stringB);
printf ("2 string1: %s", string1);
printf ("2 string2: %s", &string2);

不能从该功能中打印。这样,您可以测试变量是按值复制还是按引用复制。