我们在文本文件中有一些数据,它作为要在运行时读取的自定义资源构建到我们的可执行文件中。此文本文件的大小超过700万个字符。
我可以成功搜索并找到资源中出现在文本文件顶部附近的字符串,但在尝试搜索几百万个字符的字符时,strstr返回NULL,表示找不到该字符串。可以存储在char *中的字符串文字的长度是否有限制,或者可以存储在嵌入式资源中的数据量是否有限制?代码如下所示
char* data = NULL;
HINSTANCE hInst = NULL;
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(IDR_TEXT_FILE1), "TESTRESOURCE");
if(NULL != hRes)
{
HGLOBAL hData = LoadResource(hInst, hRes);
if (hData)
{
DWORD dataSize = SizeofResource(hInst, hRes);
data = (char*)LockResource(hData);
}
else
break;
char* pkcSearchResult = strstr(data, "NumListDetails");
if ( pkcSearchResult != NULL )
{
// parse data
}
}
感谢。
答案 0 :(得分:2)
问题可能是您用于搜索的方法。 strstr
使用ANSI字符串,并在搜索域中遇到'\ 0'时终止。
您可以使用类似memstr
的内容(可以找到许多实现中的一个here)。
答案 1 :(得分:1)
您是否从GetLastError()获得任何输出,特别是在调用SizeofResource
之后。
您还可以检查dataSize > 0
以确保没有发生错误。
DWORD dataSize = SizeofResource(hInst, hRes);
if(dataSize > 0)
{
data = (char*)LockResource(hData);
}
else
{
//check error codes
}
答案 2 :(得分:1)
问题是数据中的空字符过早结束了char *变量。为了解决这个问题,我只需将数据读入void指针,然后将其复制到动态创建的数组中。
DWORD dataSize = SizeofResource(hInst, hRes);
void* pvData = LockResource(hData);
char* pcData = new char[dataSize];
memcpy_s(pcData,strlen(pcData),pvData,dataSize);