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

时间:2015-07-19 14:30:53

标签: c string char segmentation-fault lldb

当我在 lldb 中遇到这些代码时,我发现它始终是*wchar_string[0] = character;这行并且永远不会循环, 此代码提供了分段错误:11。

这段代码,有什么不对?

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

2 个答案:

答案 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;

你已经有了一个阵列。你不需要任何指针,因此你不需要那些*个字符。