char * 赋值:这段代码有什么问题?

char * assignment: What's wrong with this code?

当我运行进入lldb中的这些代码时,我发现它总是在*wchar_string[0] = character;这一行并且从不循环, 此代码给出 Segmentation fault: 11.

这段代码,有什么问题吗?

wchar_t *wchar_string[1];
*wchar_string[0] = character;
wcstombs(retstring, (const wchar_t *)wchar_string, 6);

你可能想要

wchar_t wchar_string[2];
wchar_string[0] = character;
wchar_string[1] = 0;

你已经有了一个数组。你不需要任何指针,所以你不需要那些 * 个字符。

*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;