当我在 lldb 中遇到这些代码时,我发现它始终是*wchar_string[0] = character;
这行并且永远不会循环,
此代码提供了分段错误:11。
这段代码,有什么不对?
wchar_t *wchar_string[1];
*wchar_string[0] = character;
wcstombs(retstring, (const wchar_t *)wchar_string, 6);
答案 0 :(得分:2)
*wchar_string[1]
是一个长度为1的数组,包含一个指向wchar_string
的指针。虽然数组的每个元素都可以指向任何东西,但最初指针并不指向任何东西。换句话说,它们的值是未定义的,这意味着解除引用它们(即应用星号运算符)是未定义的行为。这就是你看到段错的原因。
要解决此问题,请在进行分配之前为wchar_string[0]
对象分配一些内存。分配可以是静态的,动态的或自动的;重要的是需要在访问之前分配内存。
wchar_t str0[7];
wchar_t *wchar_string[1];
wchar_string[0] = str0; // could use &str0[0], too
*wchar_string[0] = character;
答案 1 :(得分:1)
你可能想要
wchar_t wchar_string[2];
wchar_string[0] = character;
wchar_string[1] = 0;
你已经有了一个阵列。你不需要任何指针,因此你不需要那些*
个字符。