3

我们在一个文本文件中有一些数据,这些数据作为自定义资源构建到我们的可执行文件中,以便在运行时读取。该文本文件的大小超过 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
    }
}

谢谢。

4

3 回答 3

2

问题可能是您用于搜索的方法。strstr使用 ANSI 字符串,当它在搜索域中遇到 '\0' 时将终止。

您可能会使用类似的东西memstr(可以在此处找到许多实现之一)。

于 2013-10-18T12:33:51.513 回答
1

您是否从 GetLastError() 获得任何输出,特别是在调用SizeofResource.

您还可以检查dataSize > 0以确保没有发生错误。

DWORD dataSize = SizeofResource(hInst, hRes);
if(dataSize > 0)
{
    data = (char*)LockResource(hData);
}
else 
{
    //check error codes
}

MSDN 文档

于 2013-10-18T10:20:12.260 回答
1

问题是数据中的空字符过早地结束了 char* 变量。为了解决这个问题,我只需将数据读入一个 void 指针,然后将其复制到一个动态创建的数组中。

DWORD dataSize = SizeofResource(hInst, hRes);
void* pvData = LockResource(hData);
char* pcData = new char[dataSize];
memcpy_s(pcData,strlen(pcData),pvData,dataSize);
于 2013-10-21T08:33:32.943 回答