【问题标题】:Passing char array into a function将 char 数组传递给函数
【发布时间】:2012-05-10 03:34:04
【问题描述】:

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

【问题讨论】:

    标签: c++ arrays function char


    【解决方案1】:

    你的功能应该是:

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

    【讨论】:

    • 棒极了,但现在说 putAddress 需要一个原型
    • 您需要对您的函数进行原型设计。 void putAddress(char *,char *,char *,char *); 将此行放在 using namespace std 之后
    【解决方案2】:

    您需要将指针传递给 char

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案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】:
          void putAddress(char* array){
              //use array as usual
          }
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              更正您的代码:

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

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

              然而,由于这是 C++ 而不是 C,我建议你改用 std::string

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

              【讨论】:

                【解决方案8】:

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

                为了将一个 char 数组传递给一个函数,你应该做你目前正在做的事情,即传递一个指向数组(第一个元素)的指针。

                所以你需要做的就是改变

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

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

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

                【讨论】:

                • 这是错误的。如果您确实这样做并尝试在函数中与所述 char 数组进行交互,您可能会收到“标量初始化程序中的多余元素”错误(使用 strcmp 等函数时)
                【解决方案9】:
                void putAddress(char[],char[],char[],char[]);
                
                function    
                void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){
                
                        return;
                }
                

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-25
                  • 2012-10-23
                  • 2016-03-27
                  • 2014-04-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多