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;
当我运行进入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;