我正在学习如何使用结构来尝试制作纸牌游戏。我已经大致永远地搞乱了这个,我无法按照我的意愿获得printf语句。我认为这与cc2
没有正确分配给ctwo.typ
有关,但我真的不知道如何处理它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char typ[20];
int num;
} card;
int main(void)
{
char cc2[] = "Two of Clubs";
card ctwo;
ctwo.typ[20] = *cc2;
ctwo.num = 2;
//The output of the following is "Two of Clubs"
printf("%s\n", cc2);
//The output of the following is "2, "
printf("%i, %s\n", ctwo.num, ctwo.typ);
//The output of the following is "2, (null)"
printf("%i, %s\n", ctwo.num, ctwo.typ[0]);
return 0;
}
答案 0 :(得分:3)
您无法在C中分配数组。
您必须使用标准库函数strcpy()
复制字符:
card ctwo;
strcpy(ctwo.typ, "Two of Clubs");
ctwo.num = 2;
由于实际字符串是常量的(一张卡不会更改其名称),您也可以在const char *typ;
中将其声明为普通struct
,并将指针设置为string literal:
card ctwo;
ctwo.typ = "Two of Clubs";
ctwo.num = 2;
这不复制实际字符,它所做的就是分配存在的字符数组的地址&#34;某处&#34;在内存中ctwo
结构实例中的指针变量。
答案 1 :(得分:2)
有几个问题,你无法分配给一个数组,你需要使用strcpy
,这个:
ctwo.typ[20] = *cc2;
应该是:
strcpy( ctwo.typ, cc2 ) ;
这printf
:
printf("%i, %s\n", ctwo.num, ctwo.typ[0]);
应该是:
printf("%i, %s\n", ctwo.num, ctwo.typ);
ctwo.typ[0]
只是第一个字符,但您需要char *
,当您使用%s
format specifier时,它需要一个指向C样式字符串的指针,该字符串是{ {1}} char
终止的数组(以null
结尾)。如果要打印单个字符,可以使用\0
格式说明符,然后%c
有效。