字符数组的初始化字符串是太长的错误(initializer-string for array of chars is too long error)
我正在使用C ++进行BlackJack游戏,并且在其中出现错误时,我有以下一段代码
typedef struct
{
int value;
char suit[8];
char name[8];
}Deck;
Deck Cards[52] = {{ 1,"Ace","Hearts"},{ 2, "Two","Hearts"}, { 3, "Three", "Hearts"}, { 4, "Four","Hearts"}, { 5,"Five","Hearts"},{ 6,"Six", "Hearts06"},
{ 7,"Seven","Hearts"},{ 8,"Eight","Hearts"},{ 9,"Nine","Hearts"},{ 10,"Ten","Hearts"},{10,"Jack","Hearts"},{10,"Queen","Hearts"},{10,"King","Hearts"},
{ 1,"Ace","Clubs"},{2, "Two", "Clubs"},{3,"Three","Clubs"},{4,"Four","Clubs"},{5,"Five","Clubs"},{6,"Six","Clubs"},{7,"Seven","Clubs"},{8,"Eight","Clubs"},
{ 9,"Nine","Clubs"},{10,"Ten","Clubs"},{10,"Jack","Clubs"},{10,"Queen","Clubs"},{10,"King","Clubs"},
{ 1,"Ace","Diamonds"},{2,"Two","Diamonds"},{3,"Three","Diamonds"},{4,"Four","Diamonds"},{5,"Five","Diamonds"},{6,"Six","Diamonds"},{7,"Seven","Diamonds"},
{ 8,"Eight","Diamonds"},{9,"Nine","Diamonds"},{10,"Ten","Diamonds"},{10,"Jack","Diamonds"},{10,"Queen","Diamonds"},{10,"King","Diamonds"},
{ 1,"Ace","Spades"},{ 2,"Two","Spades"},{3,"Three","Spades"},{4,"Four","Spades"},{5,"Five","Spades"},{6,"Six","Spades"},{7,"Seven","Spades"},
{ 8,"Eight","Spades"},{ 9,"Nine","Spades"},{10,"Ten","Spades"},{10,"Jack","Spades"},{10,"Queen","Spades"},{10,"King","Spades"}};
错误是
Main.c:39:127: error: initializer-string for array of chars is too long [-fpermissive]
第39行是上面发布的代码中的最后一行
请帮我弄清楚编译器为什么会抛出错误
I am working on a BlackJack Game using C++, and I have the following piece of code within it where I am getting an error
typedef struct
{
int value;
char suit[8];
char name[8];
}Deck;
Deck Cards[52] = {{ 1,"Ace","Hearts"},{ 2, "Two","Hearts"}, { 3, "Three", "Hearts"}, { 4, "Four","Hearts"}, { 5,"Five","Hearts"},{ 6,"Six", "Hearts06"},
{ 7,"Seven","Hearts"},{ 8,"Eight","Hearts"},{ 9,"Nine","Hearts"},{ 10,"Ten","Hearts"},{10,"Jack","Hearts"},{10,"Queen","Hearts"},{10,"King","Hearts"},
{ 1,"Ace","Clubs"},{2, "Two", "Clubs"},{3,"Three","Clubs"},{4,"Four","Clubs"},{5,"Five","Clubs"},{6,"Six","Clubs"},{7,"Seven","Clubs"},{8,"Eight","Clubs"},
{ 9,"Nine","Clubs"},{10,"Ten","Clubs"},{10,"Jack","Clubs"},{10,"Queen","Clubs"},{10,"King","Clubs"},
{ 1,"Ace","Diamonds"},{2,"Two","Diamonds"},{3,"Three","Diamonds"},{4,"Four","Diamonds"},{5,"Five","Diamonds"},{6,"Six","Diamonds"},{7,"Seven","Diamonds"},
{ 8,"Eight","Diamonds"},{9,"Nine","Diamonds"},{10,"Ten","Diamonds"},{10,"Jack","Diamonds"},{10,"Queen","Diamonds"},{10,"King","Diamonds"},
{ 1,"Ace","Spades"},{ 2,"Two","Spades"},{3,"Three","Spades"},{4,"Four","Spades"},{5,"Five","Spades"},{6,"Six","Spades"},{7,"Seven","Spades"},
{ 8,"Eight","Spades"},{ 9,"Nine","Spades"},{10,"Ten","Spades"},{10,"Jack","Spades"},{10,"Queen","Spades"},{10,"King","Spades"}};
The error is
Main.c:39:127: error: initializer-string for array of chars is too long [-fpermissive]
Line 39 is the last line in the code posted above
Please help me in figuring out why the compiler is throwing an error
原文:https://stackoverflow.com/questions/21407898
更新时间:2019-12-09 14:16
最满意答案
字符串"Diamonds"有9个字符,包括空终止字符。 因此, name必须至少有9个元素。
但是,看起来你的name成员应该被称为suit ,反之亦然。
The string "Diamonds" has 9 characters including the null terminating character. Therefore, name must have at least 9 elements.
However, it looks like your name member should be called suit and vice versa.
2014-01-28
相关问答
你首先需要一个C(和/或C ++)引擎,你需要更多地了解你的声明和指针访问的语法等等。 这个: char *mqtt_command[3] = {};
表示“ mqtt_command是一个3 char *的数组”,即三个指向字符的指针。 由于字符串表示为字符的指针,因此可以将其称为“三个字符串的数组”。 尽管这些角色本身并没有实际的空间 ,但这还不够,但这是一个很好的开始。 那么,你的第一个错误是这个代码: *mqtt_command[i] = str;
编译器抱怨的问题是你要解除引用次数太
...
最后一个元素的自动调整不是标准的c ++。 该标准允许你声明这个零长度的数组,这是明显的用例,但没有说如何让它分配你想要的大小。 有些编译器在某些方面支持它作为扩展。 要在预模板日期内干净地完成,需要新的自定义分配器操作员。 现在你可以将它包装在一个派生的模板实例类中,它实际上将尺寸作为模板参数进行调整 - 你可以从模板函数中返回它,派生出数组的大小。 基本阵列然后合法使用。 The auto-sizing of the last element is not standard c++. The
...
"this is a string"
和 'o' /* this is a character */
"this is a string"
and 'o' /* this is a character */
字符串"Diamonds"有9个字符,包括空终止字符。 因此, name必须至少有9个元素。 但是,看起来你的name成员应该被称为suit ,反之亦然。 The string "Diamonds" has 9 characters including the null terminating character. Therefore, name must have at least 9 elements. However, it looks like your name member shoul
...
尾部'\0'需要多一个[28]才是有效的字符串。 看看C编程笔记:第8章:字符串 : C中的字符串由字符数组表示。 字符串的末尾标有一个特殊字符,即空字符,它只是一个值为0的字符(空字符与空字符除名称外没有任何关系,在ASCII字符集中,空字符被命名为NUL。)空或字符串终止字符由另一个字符转义序列\ 0表示。 正如Jim Balter和Jayesh指出的那样,当你提供初始值时,你可以省略数组的大小(编译器使用初始值的数目作为数组大小)。 char greek[] = "ABGDE#ZYHIKLM
...
你对内存布局的理解或多或少是正确的。 但是你遇到的问题是C中的初始化语义之一。 这里的声明中的=符号不是赋值运算符。 相反,它是为被实例化的变量指定初始值设定项的语法。 在一般情况下, T x = y; 与T x; x = y;不一样T x; x = y; T x; x = y; 。 有一种语言规则可以从字符串文字初始化字符数组。 (在这种情况下字符串文字不是“被评估为其基地址”)。 没有一种语言规则可以将数组从指向要被复制到数组中的元素的指针初始化。 为什么这样的规则? “历史原因”。 Your
...
您可以使用的最接近的是可变参数模板: struct foo
{
size_t a;
size_t b;
unsigned char c[32];
template
constexpr foo(size_t a_, size_t b_, UnsignedChar ... s) :
a(a_),
b(b_),
c{s...} //use curly br
...
C字符串文字"12"需要3个字符, 1和空终止符。 如果要初始化2 char数组,请执行以下操作: static const char _basex2 [2] = {'1','2'}; The C-string literal "12" takes 3 characters, 1, 2, and the null terminator. If you want to initialize the 2 char array, do this: static const char _basex2[2]
...
你和两个条件: input.substring(0,1).equalsIgnoreCase("a") &&
input.substring(0,1).equalsIgnoreCase("b")
两者在同一时间都不可能是true 。 这就是结果始终为false并抛出异常的原因。 你真正想要的是: String first = input.substring(0,1);
String second = input.substring(1);
if (!((first.
...
它正是它所告知的:你的字符串太长而不适合你的char数组,所以你的编译器告诉你它不会继续进行。 您可以通过增强数组的大小来使其工作,如下所示: char ns[ ][30] = //... ;
这里的30只是代表你最大的字符串; 它需要具有最大预定义字符串+ 1的大小( 以便可以添加空终止字符\0 )。 例如,如果你的最大字符串是"apple" ,那么你的数组必须至少为6 。 您可以通过执行此操作来迭代这些字符串,例如: int array_items = sizeof(ns) / sizeof
...