首页 文章

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

提问于
浏览
3

有没有一种正确的方法来调用一个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

    你目前正在做:

    manipulateStrings(stringA, stringB);

    并在 manipulateStrings 内打印 . 相反,为了验证你是否正确地做了,我会做:

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

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

  • 11

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

    但是,您的代码还有其他问题 . 您不需要将指针传递给指针(或指向数组的指针),因为您不会改变输入,只会改变它所引用的内容 . 您想复制一个字符串 . 大 . 你需要的只是一个指向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;
    }
    

相关问题