将char数组传递给函数

时间:2012-04-30 12:21:01

标签: c++ arrays function char

如何将char数组传递给函数。

声明

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)时类型为char的形式参数1正在传递char *。

9 个答案:

答案 0 :(得分:9)

你的功能应该是:

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

答案 1 :(得分:9)

您需要将指针传递给char

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

然后你需要注意你知道每个数组的大小,这样你就不会在结尾处编制索引,在你的情况下,它们都是64。

答案 2 :(得分:5)

您可以通过两种方式传递数组:

(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的选项,它将复制整个数组并将其作为自动变量进行管理。

答案 3 :(得分:4)

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

答案 4 :(得分:4)

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

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

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

    something(somestring);

    return 0;
}

因为数组在传递给函数时会自动衰减为指针,所以你需要做的就是传递字符数组并且它可以工作。所以在你的例子中:

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

答案 5 :(得分:4)

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

答案 6 :(得分:2)

更正您的代码:

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

但它仍然是错的。数组衰减到指针,这就是它将编译的原因,但如果参数不是以null结尾,则会导致错误。如果选择这种方法,你也应该传递大小。

但是,因为这是C ++而不是C,我建议你改用std::string

void putAddress(const std::string&,const std::string&,const std::string&,const std::string&);

答案 7 :(得分:0)

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

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

        return;
}

你忘记了括号,把它们放在上面的代码中。

答案 8 :(得分:0)

编译器的错误使得fromName确实是指向fromName数组的(第一个元素)的指针。这只是C ++(和普通C)语法。

为了将char数组传递给函数,您应该执行当前正在执行的操作,即将指针传递给(数组的)第一个元素。

所以你需要做的就是改变

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

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

PS:你的下一个问题是知道(使putAddress知道)每个数组的长度。如果这些是固定的,你没有问题。