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,因为它更便于携带?