错误:从不兼容的宽字符串初始化的宽字符数组

时间:2013-05-29 00:08:56

标签: c unicode compiler-errors c-strings

我一直在搜索,但我没有找到有关此错误的任何有价值的信息。

typedef struct {

        unsigned short string[];

} s;

const s str = {

        .string = L"George Morgan"

};

解决方案:

typedef struct {

        int string[];

} s;

const s str = {

        .string = L"George Morgan"

};

就像int一样简单。

3 个答案:

答案 0 :(得分:3)

前缀为L的字符串文字存储在wchar_t数组中,您将修复使用它时观察到的错误。您需要包含标头wchar.h才能访问它。此外,sizeof(s)是常量,因此它显然不能依赖于它初始化的字符串。由此可以很容易地看出,您必须提供阵列的范围。

#include <wchar.h>

#define S_STRING_LEN 256

typedef struct {
     wchar_t string[S_STRING_LEN];
} s;

const s str = { .string = L"George Morgan" };

答案 1 :(得分:0)

解决方案是使用int而不是使用unsigned short来初始化unicode字符串。

答案 2 :(得分:0)

我在Arduino上遇到了以下问题,并找到了解决方案。

  struct Mesaj { 
    byte MakineNo[2] = "1";  //The ERROR POINT
    byte Nem[3];
    byte Sicaklik[4];
    int id;
  } mesaj;

解决方案是:

 struct Mesaj { 
    byte MakineNo[2]; // Remove the numbers and
    byte Nem[3];
    byte Sicaklik[4];
    int id;
  } mesaj;

  *(int*)(mesaj.MakineNo) = 1; //Added here!