12

如何将 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*。

4

9 回答 9

9

你的功能应该是:

void putAddress(char *,char *,char *,char *);
于 2012-04-30T12:22:55.517 回答
9

您需要将指针传递给 char

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

然后你需要小心你知道每个数组的大小,这样你就不会索引到最后,在你的情况下它们都是 64。

于 2012-04-30T12:23:20.830 回答
8

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

(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

您还可以迭代 using 的选项std::string,这将复制整个数组并将其作为自动变量进行管理。

于 2012-04-30T12:25:37.683 回答
5

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

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*);
于 2012-04-30T12:23:14.180 回答
4
void putAddress(char* array){
    //use array as usual
}
于 2012-04-30T12:22:55.693 回答
4

编译器在那里告诉你......它被传递为char*. 所以使用char*char ar[]

于 2012-04-30T12:23:38.610 回答
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&);
于 2012-04-30T12:25:08.027 回答
0
void putAddress(char[],char[],char[],char[]);

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

        return;
}

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

于 2012-04-30T12:26:24.833 回答
0

编译器的错误是有道理的,因为 fromName 确实是指向 fromName 数组(的第一个元素)的指针。这只是 C++(和纯 C)语法。

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

所以你需要做的就是改变

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

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

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

于 2012-04-30T12:28:53.070 回答