C++ 将字符串复制到二维字符数组时出错

C++ 将字符串复制到二维字符数组时出错,c++,string,C++,String,嗨,我想保持100个字符串。我试图将每个字符串复制到二维字符数组中。在编译程序时,我发现以下错误 error: incompatible types in assignment of 'char' to 'char [10]' make[1]: *** [HPortClient.o] Error 1 请告诉我如何将此字符串复制到2D字符数组中。下面是代码片段 //------------------------------------------------------------------

嗨,我想保持100个字符串。我试图将每个字符串复制到二维字符数组中。在编译程序时,我发现以下错误

error: incompatible types in assignment of 'char' to 'char [10]'
make[1]: *** [HPortClient.o] Error 1
请告诉我如何将此字符串复制到2D字符数组中。下面是代码片段

//-----------------------------------------------------------------------------------------

#define MAX_DEVICE_NAMES    100
#define MAX_CHAR_NAME       10

struct HartShmDeviceData {
     char m_Name[MAX_DEVICE_NAMES][MAX_CHAR_NAME];

};
struct HartShmDeviceData *khdev;

void HPortClient::WriteDeviceListInShm(void)
{
    HartDevice *hDev;
    std::string tmp;
    int i=0;
    ITERATOR iter;
    for(iter = m_DeviceList.begin(); iter !=m_DeviceList.end(); ++iter)
    {
        hDev = *iter;
        const char *ptr=tmp.c_str();
        tmp = hDev->getName();
        ptr=tmp.c_str();

        strcpy(khdev->m_Name[i++],ptr); //Error in this line

        //khdev->m_Name[tmp.size()] = '\0'; // don't forget the terminating 0

    }
}

您在问题中发布的代码应该正确编译

你可能想要这个:

  ...
  strcpy(khdev->m_Name[i],ptr);
  khdev->m_Name[i][tmp.size() + 1] = '\0';    // don't forget the terminating 0 
  i++ ;
} 
khdev->m_Name[tmp.size()]='\0'
显然是错误的,因为
khdev->m_Name[tmp.size()]
不是
char
类型,而是
char[MAX_char\u Name]


顺便说一句,strcpy已经复制了终止零,因此行
khdev->m_Name[i][tmp.size()+1]='\0'实际上是不必要的。

除了你必须分配
hDev
之外(我猜在共享mem中),你还必须写

  strcpy(khdev->m_Name[i],ptr); // this looks fine to me
  khdev->m_Name[i++][tmp.size()] = '\0'; 

'\0'
是一个字符,
khdev->m_Name[]
是一个字符数组。

您确定错误在
strcpy()
行上,而不是在下一行尝试终止字符串的行上吗?
strcpy()?这毕竟只是一个指针。你的代码是C还是C++?如果是C++,请不要使用<代码> StrucP。我的代码是C++。请让我知道如何才能有效地实现这一点?谢谢你的时间。谢谢Michael,这解决了我的编译问题,但是我在khdev->m_Name[i][tmp.size()+1]='\0'行运行代码时遇到了分段错误;您必须自己用调试器调试,或者至少插入一些printf来查看发生了什么。@Tushar您已经分配了“hDev”?谢谢Oncaphillis。这也有效,但在strcpy上运行代码时出现了分段错误(khdev->m_Name[i],ptr);