#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]变量中?
答案 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)
您必须考虑以下几点:
正如上面提到的其他人(merlin2011,juanchopanza),如果参数是以null结尾的字符串,最好使用std :: string,然后使用std :: copy等复制例程来填充数据成员数组。
你应该将参数作为const传递,因为它没有在构造函数体内修改(即)。
如果要传递char值数组(而不是以null结尾的字符串),则应将数组的大小作为另一个参数传递给构造函数。然后,在构造函数体内,使用复制例程(例如std :: copy)将所需数量的char值(由附加参数指定)复制到数据成员数组。
在这种情况下,char *或char []表示法之间没有区别,因为它们都会指定传递给函数的char指针参数。有关这些表示法之间差异的详细信息,请参阅this thread。