1

在过去的几个小时里,我把头撞在墙上,实际上并不真正理解这里出了什么问题。

我有一个包含不超过 128 个字符的词组的文本文件。我尝试做的是内存映射这个文件并将类型读取wchar_t到一个大缓冲区中。基本上这个文件是一个文本查找,给定字符串的位置和长度将从这个文本索引中返回一个字符串。

这是 - 至于演示 - 我做了什么(或试图完成)。

int main(int argc, char **argv)
{
    int fd = 0;
    struct stat statbuf;
    wchar_t aux[128] = {0};
    const wchar_t *px = NULL;

    setlocale(LC_CTYPE, "");
    setlocale(LC_COLLATE, "");

    fd = open("./test2_termlist.txt", O_RDONLY); 

    fstat(fd, &statbuf); 

    void *p = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);

    /* Could have casted p to wchar_t already ... */
    px = (wchar_t *)p;

    /* Copy string with 45 characters from char position 92 */
    memcpy(aux, (const wchar_t *)px + 92, 45);
    aux[45] = L'\0';

    printf("string = %ls\n", aux); 

    return 1;
}

以上是工作演示代码。我尝试了各种方法,例如使用wmemcpywcsncpy获取字符串。结果总是乱码。如果我使用char而不是wchar_t,事情似乎可以工作,但是将使用的索引基于宽字符串,因此如果文本文件被解释为char.

我需要快速访问大型文本文件,这就是我尝试在mmap这里使用的原因。

我在这里(也许是愚蠢的)错误是什么?

注意:valgrind 也不显示任何错误。

4

0 回答 0