gpt4 book ai didi

c++ - wchar_t 字符串数组的成员丢失

转载 作者:行者123 更新时间:2023-12-01 14:10:00 27 4
gpt4 key购买 nike

我尝试将以下字符串数组传递给函数:

const wchar_t *testTokens[] = { L"function",
L"(",
L"x",
L")",
L"{",
L"var",
L"test"
L"=",
L"\"",
L"this"
L"is",
L"a",
L"string",
L"\"",
L";",
L"}" };

有问题的函数看起来像这样:
processArray(const wchar_t **strings, unsigned int numStrings);
由于上面定义的数组正好有 16 个条目,因此我将 numStrings 设置为相同。然而,由于 processArray 函数内部的段错误,程序意外崩溃。
自然地,我使用内置调试器的 Visual Studios 调查了导致错误的原因,我发现 testTokes 中的一些元素在其定义后立即“融合在一起”:
-       testTokens,16   0x00effba0 {0x00660f88 L"function", 0x00660b70 L"(", 0x00660c04 L"x", 0x00660c0c L")", 0x00660cec L"{", ...}    const wchar_t *[16]
+ [0] 0x00660f88 L"function" const wchar_t *
+ [1] 0x00660b70 L"(" const wchar_t *
+ [2] 0x00660c04 L"x" const wchar_t *
+ [3] 0x00660c0c L")" const wchar_t *
+ [4] 0x00660cec L"{" const wchar_t *
+ [5] 0x00660fb0 L"var" const wchar_t *
+ [6] 0x00660fbc L"test=" const wchar_t *
+ [7] 0x00660cf4 L"\"" const wchar_t *
+ [8] 0x00660cfc L"thisis" const wchar_t *
+ [9] 0x00660d10 L"a" const wchar_t *
+ [10] 0x00660fe4 L"string" const wchar_t *
+ [11] 0x00660cf4 L"\"" const wchar_t *
+ [12] 0x00660d5c L";" const wchar_t *
+ [13] 0x00660d64 L"}" const wchar_t *
+ [14] 0xcccccccc <Error reading String.> const wchar_t *
+ [15] 0x7f4af182 <Error reading String.> const wchar_t *
然后我尝试手动向每个字符串添加空终止符:
const wchar_t *testTokens[] = { L"function\0",
L"(\0",
L"x\0",
L")\0",
L"{\0",
L"var\0",
L"test\0"
L"=\0",
L"\"\0",
L"this\0"
L"is\0",
L"a\0",
L"string\0",
L"\"\0",
L";\0",
L"}\0" };
这导致了以下内存布局:
-       testTokens,16   0x0055fe30 {0x006a0f88 L"function", 0x006a0b70 L"(", 0x006a0c04 L"x", 0x006a0c0c L")", 0x006a0cec L"{", ...}    const wchar_t *[16]
+ [0] 0x006a0f88 L"function" const wchar_t *
+ [1] 0x006a0b70 L"(" const wchar_t *
+ [2] 0x006a0c04 L"x" const wchar_t *
+ [3] 0x006a0c0c L")" const wchar_t *
+ [4] 0x006a0cec L"{" const wchar_t *
+ [5] 0x006a0fb0 L"var" const wchar_t *
+ [6] 0x006a0fbc L"test" const wchar_t *
+ [7] 0x006a0cf4 L"\"" const wchar_t *
+ [8] 0x006a0cfc L"this" const wchar_t *
+ [9] 0x006a0d10 L"a" const wchar_t *
+ [10] 0x006a0fe4 L"string" const wchar_t *
+ [11] 0x006a0cf4 L"\"" const wchar_t *
+ [12] 0x006a0d5c L";" const wchar_t *
+ [13] 0x006a0d64 L"}" const wchar_t *
+ [14] 0xcccccccc <Error reading String.> const wchar_t *
+ [15] 0x5d1ee42e <Error reading String.> const wchar_t *

正如您可以清楚地看到以前融合在一起的字符串现在完全丢失了,我完全不知道为什么。

最佳答案

你忘记了 L"test" 后面的逗号, 之后 L"this" .因此,编译器会处理相邻的字符串文字 "test""="作为单个字符串,以及相邻的字符串文字 "this""is"作为单个字符串。您可以在调试器输出中看到这一点。因此,数组实际上有 14 个元素,而不是 16 个。

关于c++ - wchar_t 字符串数组的成员丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com