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

C 错误:从不兼容的宽字符串初始化宽字符数组,c,unicode,compiler-errors,c-strings,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

我已经到处搜索了,但是我没有找到任何关于这个错误的有价值的信息

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

一样简单,一个前缀为
L
的字符串文本存储在
wchar\u 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" };
#包括
#定义字符串长度256
类型定义结构{
wchar_t string[S_string_LEN];
}s;
常量s str={.string=L“George Morgan”};

前缀为
L
的字符串文本存储在
wchar\u 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" };
#包括
#定义字符串长度256
类型定义结构{
wchar_t string[S_string_LEN];
}s;
常量s str={.string=L“George Morgan”};

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

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

我在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!

我在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!

什么编译器,什么操作系统,什么确切的错误消息?您的编译器是否有
wchar\u t
?编译器支持哪一个C标准,你告诉它使用哪一个?GCC,我正在编写一个操作系统,标题中的那个。不,都是C99。什么编译器,什么操作系统,什么确切的错误消息?您的编译器是否有
wchar\u t
?编译器支持哪一个C标准,你告诉它使用哪一个?GCC,我正在编写一个操作系统,标题中的那个。不,都是C99。C99.我认为wchar\u t被定义为
无符号短码
。我试图编写独立于库的代码,所以我只需要定义。此外,字符串长度在字符串的定义中应该无关紧要,因为它驻留在typedef中。实际上,在结构中填充字符串会定义字符串长度。@不,标准不要求这样做。这取决于实现。@您是否试图避免包含
wchar.h
?它是C标准库的一部分,因此您可以很好地假设您的代码的用户将拥有它。@GeorgeMorgan尝试使用
int
?虽然我不知道有什么可移植的方法可以避免wchar\u t,我也不提倡它。
wchar\u t
应该在
中定义,它是编译器的一部分,而不是操作系统或任何库。为什么要避免使用wchar\u t,因为它更便于携带?我以为wchar\u t被定义为
无符号短字符
。我试图编写独立于库的代码,所以我只需要定义。此外,字符串长度在字符串的定义中应该无关紧要,因为它驻留在typedef中。实际上,在结构中填充字符串会定义字符串长度。@不,标准不要求这样做。这取决于实现。@您是否试图避免包含
wchar.h
?它是C标准库的一部分,因此您可以很好地假设您的代码的用户将拥有它。@GeorgeMorgan尝试使用
int
?虽然我不知道有什么可移植的方法可以避免wchar\u t,我也不提倡它。
wchar\u t
应该在
中定义,它是编译器的一部分,而不是操作系统或任何库。您为什么要避免使用wchar\t,因为它更便于携带?