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