将字符数组传递给函数

12

如何将字符数组传递给函数。

声明

char fromName[64];
char fromStreet[64];
char fromSuburb[64];
char fromCountry[64];

函数调用

    Trans[i]->putAddress(fromName, fromStreet, fromSuburb, fromCountry);

原型

void putAddress(char,char,char,char);

function    
void putAddress(char fName,char fStreet,char fSuburb,char fCountry){

        return;
}

错误 "main.cpp", 第86行: 错误: 调用 Mail::putAddress(char, char, char, char) 时,形参 1 的类型为 char,但实参为 char*。

9个回答

9

你需要传递字符指针

void putAddress(char* fName,char* fStreet,char* fSuburb,char* fCountry);

接着你需要注意每个数组的大小,以免索引超出末尾,在你的情况下它们都是64。


9

您的函数应该是:

void putAddress(char *,char *,char *,char *);

真棒,但现在它说putAddress需要一个原型。 - Daniel Del Core
你需要原型化你的函数。在 using namespace std 后面加上这一行:void putAddress(char *,char *,char *,char *); - Nabin

9
您可以通过两种方式传递数组:
(1)传统的C风格:
在这里,您通过地址传递,并使用指针接收
void putAddress(char *,char *,char *,char *);

(2) C++按引用传递:
您可以通过指定大小来按引用传递数组:

 void putAddress(char (&a1)[64], char (&a2)[64],char (&a3)[64], char (&a4)[64]);

这有助于您立即正确获取数组大小(不允许使用指针)。也可以使用template进行更复杂的操作。

您还可以考虑使用std::string来迭代选项,它将复制整个数组并将其管理为自动变量。


5
你可以将字符串(字符数组)作为指向数组第一个字符的指针传递:

你可以将字符串(字符数组)作为指向数组第一个字符的指针传递:

void something(char *str) { /* ... */ }

int main(int argc, char **argv) {
    char somestring[] = "Hell World!\n";

    something(somestring);

    return 0;
}

因为数组在传递到函数时会自动转换为指针,所以你只需要传递字符数组即可。因此,在你的例子中:
```c char str[] = "Hello World"; print_string(str); ```
不需要更改`print_string`函数的参数类型。
void putAddress(char*, char*, char*, char*);

4
void putAddress(char* array){
    //use array as usual
}

4
编译器在这里告诉你...它被传递为char*。因此,请使用char*char ar[]

2
为了修正您的代码:
void putAddress(char*,char*,char*,char*);

但这仍然是错误的。数组会衰变为指针,这就是为什么它可以编译,但如果参数没有以空字符结尾,则会导致错误。如果选择这种方法,您还应传递大小。然而,既然这是C++而不是C,我建议您使用std::string代替:
void putAddress(const std::string&,const std::string&,const std::string&,const std::string&);

0
void putAddress(char[],char[],char[],char[]);

function    
void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){

        return;
}

你忘记加括号了,请像上面的代码一样加上它们。

0
编译器的错误是有意义的,因为fromName确实是指向fromName数组的(第一个元素)。这只是C++(和纯C)语法。
为了将char数组传递给函数,应该做你目前正在做的事情,也就是传递指向数组的(第一个元素的)指针。
所以你需要做的就是改变

    void putAddress(char,char,char,char);

    void putAddress(char *, char *, char *, char *);

提示:你接下来的问题是要知道(让putAddress意识到)每个数组的长度。但如果这些长度是固定的,那么你就没有问题了。


如果你这样做并尝试在函数内与该字符数组进行交互,很可能会出现“标量初始化程序中存在过多的元素”错误(当使用像strcmp这样的函数时)。 - David Bandel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接