class Link{
char name[];
Link *next;
};
Link::Link(char pname[]){
next=NULL;
name[]=pname;
};
在类中pname
创建对象时如何分配我传递的值( ) ?name[]
Link
通常,您将用于std::string
存储字符串:
class Link{
std::string name;
Link *next;
};
Link::Link(char const pname[]) : next(NULL), name(pname) {}
如果您有充分的理由嵌入字符数组而不是让标准字符串类为您处理内存分配,那么您将需要类似的东西:
class Link{
char name[I_HOPE_THIS_IS_BIG_ENOUGH];
Link *next;
};
Link::Link(char const pname[]) : next(NULL) {
name[sizeof name - 1] = 0;
std::strncpy(name, pname, sizeof name);
if (name[sizeof name - 1] != 0) {
throw std::runtime_error("Whoops! My buffer was too small.");
}
}
首先,您不能将 achar name[]
作为类的成员。类型必须完整,即必须明确指定严格的固定数组大小
class Link {
char name[100];
Link *next;
};
其次,原始数组不能被分配或复制初始化。要将数据从一个通用数组复制到另一个,您可以使用库函数
Link::Link(const char pname[]) : next(NULL) {
std::copy(pname, pname + 100, name);
// Assuming `pname` also points to an array of 100 chars
}
或者,如果我们正在处理一个以零结尾的字符数组(又名 C 字符串)
Link::Link(const char pname[]) : next(NULL) {
assert(std::strlen(pname) < 100);
std::strcpy(name, pname);
}
第三,也是最重要的,在许多情况下,正确的解决方案将取决于阵列的性质。你name
的情况是什么?您在问题中没有提供任何信息。是不是字符串?std::string
如果它应该是一个字符串,那么使用class 而不是原始 char 数组可能会好得多。即使你需要一个数组(不是字符串),你最好还是使用std::vector
.
我建议这个解决方案:
class Link {
Link(char* pname ) {
name=pname;
}
char* name;
Link *next;
};