C++ strcpy复制其他数组的内容

C++ strcpy复制其他数组的内容,c++,arrays,string,char,C++,Arrays,String,Char,因此,我有一段代码将char数组转换为struct的内容。(不,我不会争论这是否是正确/最有效的方法) void chararray\u to\u categorie(categorie&levarr,char**chararray) { 字符串温度=字符集[0]; int length=temp.length(); temp=temp.substr(0,((length代码中有很多东西不太理想,但错误归结为: levarr.naam[20] = '\0'; 应该是哪一个 levarr.naa

因此,我有一段代码将char数组转换为struct的内容。(不,我不会争论这是否是正确/最有效的方法)

void chararray\u to\u categorie(categorie&levarr,char**chararray)
{
字符串温度=字符集[0];
int length=temp.length();

temp=temp.substr(0,((length代码中有很多东西不太理想,但错误归结为:

levarr.naam[20] = '\0';
应该是哪一个

levarr.naam[19] = '\0';
数组从0开始计数

其他需要解决的问题:

  • 使用save
    strcpy
    函数,该函数NULL终止字符串并具有一个size参数,它可以防止您出现此问题
  • 不要获取子字符串,使用安全函数仅复制原始字符串中的那么多字符

Show structure.typedef struct{int ID;char naam[20],omschrijving[50];}categorie;试图用strncpy重新制作它,因为我认为这是u对“安全函数”的建议,尽管同样的情况仍然存在,也就是chararray[1]仍然被复制到levarr.naam,它应该只包含chararray[0].
strncpy(levarr.naam,chararray[0],20);levarr.naam[19]='/0';
实际上,levarr.naam[20]也会发生同样的情况='/0';
@semanreu我很小心地没有说
strncpy
,因为这不会以空结尾字符串,顺便说一句,空结尾是
\0
,而不是
/0
。哦,错过了这一点,问题就解决了。尽管唯一的缺点是这会占用数组中的最后一个插槽,但有解决办法吗?@semanreu N实际上,扩大阵列是唯一明智的选择。
levarr.naam[19] = '\0';