c ++通过参数将值传递给char数组

时间:2012-11-23 16:54:47

标签: c++ arrays

class Link{       
   char name[];
   Link *next;
};

Link::Link(char pname[]){       
   next=NULL;
   name[]=pname;    
};

如何在课程pname中创建name[]对象时,如何指定我传递的值(Link)?

3 个答案:

答案 0 :(得分:2)

通常,您可以使用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.");
    }
}       

答案 1 :(得分:2)

首先,您不能将char 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类而不是原始字符数组可能会好得多。即使您需要一个数组(不是字符串),最好还是使用std::vector

答案 2 :(得分:0)

我建议这个解决方案:

class Link {
Link(char* pname )  {
     name=pname;
}
char* name;
Link *next;
};