4

是否有正确的方法来调用 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 的变量的值

编辑:我的问题是 - 你将如何更改函数中两个字符串的值?

4

2 回答 2

15

C 中没有通过引用传递这样的东西。C 中的所有内容都是按值传递的。这会导致您需要的解决方案;添加另一个间接级别。

但是,您的代码还有其他问题。您不需要传递指向指针(或指向数组的指针)的指针,因为您没有改变input,只有它所指的内容。你想复制一个字符串。伟大的。为此,您需要一个指向 char 的指针,该指针已初始化以指向足够的内存量。

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

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;
}
于 2013-03-25T03:03:35.607 回答
0

您目前正在做:

manipulateStrings(stringA, stringB);

并从内部打印manipulateStrings。相反,为了验证您是否正确执行此操作,我会这样做:

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

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

于 2013-03-25T03:05:43.960 回答