【问题标题】:char * assignment: What's wrong with this code?char * assignment:这段代码有什么问题?
【发布时间】:2015-10-08 17:40:00
【问题描述】:

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

这段代码,有什么问题?

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

【问题讨论】:

  • 什么是character
  • @ForceBru 字符是 wchar_t 类型
  • 它有两个参数,wchar_t 字符,char *retstring,将字符转字符串转成retstring。

标签: c string char segmentation-fault lldb


【解决方案1】:

你可能想要

wchar_t wchar_string[2];
wchar_string[0] = character;
wchar_string[1] = 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;
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2018-09-09
      相关资源
      最近更新 更多