如何在类中传递char作为函数参数?

时间:2014-05-21 06:28:02

标签: c++ class char

#include <iostream>

using namespace std;

class X{
    private:
        char ime[50];
    X(char *c){ // or char (char c[]) which one to use?
        // how to set the value of c inside the ime[50];
    }
};

int main()
{

    return 0;
}

我想在类的构造函数中传递一个char作为函数参数,所以我可以使用两种方式..我使用哪一种?一旦值传递,我如何将c的值放在类的char ime [50]变量中?

3 个答案:

答案 0 :(得分:2)

正如评论所建议的那样,使用std::string的最简单方法。此外,如果您的构造函数不是public,则没有人可以调用它。

class X{
    private:
        std::string ime;
    public:
        X(const std::string& str) : ime(str) {
        }
};

如果您坚持使用char*,并且确定您将传入长度为50的字符数组,您可以使用memcpy

class X{
    private:
        char ime[50];
    public:
        X(const char* c) {
            memcpy(ime,c,50);
        }
};

如果你坚持char* ,你不知道长度是多长(只有它小于50),你必须传入长度。

class X{
    private:
        char ime[50];
    public:
        X(const char* c, int length) {
            if (length > 50) length = 50;
            memcpy(ime,c,length);
        }
};

请注意,我们使用memcpy代替strncpy,因为我对char[]内的内容不做任何假设。

答案 1 :(得分:0)

两者都相同,使用C字符串复制例程将数据复制到内部缓冲区。

密切注意传入的字符串的长度,并仅复制前50个字符。

但实际上,使用std(string或vector,basic_str)使用起来更加简单/安全

答案 2 :(得分:0)

您必须考虑以下几点:

  1. 正如上面提到的其他人(merlin2011,juanchopanza),如果参数是以null结尾的字符串,最好使用std :: string,然后使用std :: copy等复制例程来填充数据成员数组。

  2. 你应该将参数作为const传递,因为它没有在构造函数体内修改(即)。

  3. 如果要传递char值数组(而不是以null结尾的字符串),则应将数组的大小作为另一个参数传递给构造函数。然后,在构造函数体内,使用复制例程(例如std :: copy)将所需数量的char值(由附加参数指定)复制到数据成员数组。

  4. 在这种情况下,char *或char []表示法之间没有区别,因为它们都会指定传递给函数的char指针参数。有关这些表示法之间差异的详细信息,请参阅this thread