Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;通过参数将值传递给char数组_C++_Arrays - Fatal编程技术网

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

C++ c++;通过参数将值传递给char数组,c++,arrays,C++,Arrays,在类链接中创建对象时,如何将传递的值(pname)赋值给name[]?我建议采用以下解决方案: class Link{ char name[]; Link *next; }; Link::Link(char pname[]){ next=NULL; name[]=pname; }; 我建议这个解决方案: class Link{ char name[]; Link *next; }; Link::Link(

在类
链接中创建对象时,如何将传递的值(
pname
)赋值给
name[]

我建议采用以下解决方案:

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

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

我建议这个解决方案:

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

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

通常,您会使用
std::string
来存储字符串:

class Link {
Link(char* pname )  {
     name=pname;
}
char* name;
Link *next;
};
如果您有很好的理由嵌入一个字符数组,而不是让标准字符串类为您分配内存,那么您将需要如下内容:

class Link{       
   std::string name;
   Link *next;
};

Link::Link(char const pname[]) : next(NULL), name(pname) {}       

通常,您会使用
std::string
来存储字符串:

class Link {
Link(char* pname )  {
     name=pname;
}
char* name;
Link *next;
};
如果您有很好的理由嵌入一个字符数组,而不是让标准字符串类为您分配内存,那么您将需要如下内容:

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.");
    }
}       
其次,原始数组无法分配或复制初始化。要将数据从一个通用数组复制到另一个通用数组,可以使用库函数

class Link {       
   char name[100];
   Link *next;
};
或者,如果我们处理的是以零结尾的字符数组(又名C字符串)

Link::Link(const char pname[]):下一个(NULL){
断言(std::strlen(pname)<100);
std::strcpy(名称,pname);
}

第三,也是最重要的一点,在许多情况下,正确的解决方案将取决于数组的性质。在您的案例中,
名称是什么?你的问题中没有提供任何信息。它是不是一根绳子?如果它应该是一个字符串,那么最好使用
std::string
类而不是原始字符数组。即使您需要数组(而不是字符串),也最好使用
std::vector

首先,您不能将
char name[]
作为类的成员。类型必须完整,即必须明确指定严格的固定数组大小

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.");
    }
}       
其次,原始数组无法分配或复制初始化。要将数据从一个通用数组复制到另一个通用数组,可以使用库函数

class Link {       
   char name[100];
   Link *next;
};
或者,如果我们处理的是以零结尾的字符数组(又名C字符串)

Link::Link(const char pname[]):下一个(NULL){
断言(std::strlen(pname)<100);
std::strcpy(名称,pname);
}

第三,也是最重要的一点,在许多情况下,正确的解决方案将取决于数组的性质。在您的案例中,
名称是什么?你的问题中没有提供任何信息。它是不是一根绳子?如果它应该是一个字符串,那么最好使用
std::string
类而不是原始字符数组。即使您需要数组(而不是字符串),也最好使用
std::vector

使用
std::string
,这样您的生活会轻松得多。您希望将引用复制到基础字符,还是复制字符本身?您可以通过使用
std::string
std::array
std::vector
来消除此处的许多压力和歧义,具体取决于您打算执行的操作。使用
std::string
,您的生活会轻松得多。您希望将引用复制到基础字符还是字符本身?根据您的意图,您可以使用
std::string
std::array
std::vector
来消除此处的大量压力和歧义。以及当指向的数据被销毁时会发生什么情况(
{char name[]=“abc”;Link l(name);}
)?您需要记录字符串必须超过
链接
对象的要求;并且希望用户遵守这个要求,因为没有办法强制执行它。当指向的数据被销毁时会发生什么情况(
{char name[]=“abc”;Link l(name);}
)?您需要记录字符串必须比
链接
对象寿命长的要求;希望用户遵守这一要求,因为没有办法强制执行。