使用指针将字符串数组传递给函数

所以我试图将一个char数组传递给一个函数并打印出来,然后返回数组。

以下是我的主要功能。 我正在做二进制搜索树但是我只是坚持传递一个字符数组。

int main()
{
    BST tree = new_bst();
    int noRecords;
    int tfn;
    char name[10];
    char *test;

    FILE *fileptr;
    fileptr = fopen("welfare1.txt", "r");
    fscanf(fileptr, "%d", &noRecords);
    fscanf(fileptr, "%s", name);
    fscanf(fileptr, "%d", &tfn);

    insert_bst(&tree, tfn, &name);
}

到目前为止,这里是插入BST函数。 我还没有实现它,因为我无法将名称字段传递给我的函数,我使用printf作为测试来查看它是否工作。

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char *name)
{

    if (self == NULL)
    {
        TaxRecordPtr newRecord = new_record();


        self = malloc(sizeof *self);
        self->data = newRecord;
        self->left = self->right = NULL;

        printf("%c", name[0]);
}

更改

insert_bst(&tree, tfn, &name);

insert_bst(&tree, tfn, name);

除非是sizeof或unary &运算符的操作数,或者是用于在声明中初始化字符数组的字符串字面量,则类型“ T N元素数组”的表达式将被转换(“decay”)为一个“指向T指针”类型的表达式,表达式的值将是数组的第一个元素的地址。

你打电话时

insert_bst(&tree, tfn, name);

表达式name不是sizeof或unary &运算符的操作数,所以它会“衰减”以键入char * ,它与函数定义中的参数类型相匹配。

你打电话时

insert_bst(&tree, tfn, &name);

表达式name是一元&运算符的操作数,所以转换不会发生; 相反,表达式的类型是char (*)[10] ,或者“指向10个元素的char数组的指针”,它与函数定义中的参数类型不匹配。


char数组相当于指向char的指针。 所以当引用一个char数组时,所需的类型将是一个指向char的双指针

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char **name)

无论如何,没有必要传递一个指向char数组的指针,你可以传递char数组本身

insert_bst(&tree, tfn, name);

您不会按值传递char数组,因为数组相当于一个指针。

链接地址: http://www.djcxy.com/p/72157.html

上一篇: Passing a string array to a function using pointers

下一篇: Read struct from binary file and convert to Hex in C