【发布时间】:2020-08-11 12:13:00
【问题描述】:
我正在尝试使用函数初始化结构。
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#define NAME_SIZE 20
#define MANA_COST_SIZE 6
#define TYPE_SIZE 20
#define TEXT_SIZE 500
#define FLAVOR_SIZE 500
#define COLOR_SIZE 6
typedef struct card
{
char mana_cost[MANA_COST_SIZE];
char name[NAME_SIZE];
char type[TYPE_SIZE];
char text[TEXT_SIZE];
char flavor[FLAVOR_SIZE];
} card_t;
void init_card(card_t* card, char name[], char mana_cost[], char type[], char text[], char flavor[])
{
strcpy_s(card->name, NAME_SIZE, name);
strcpy_s(card->mana_cost, MANA_COST_SIZE, mana_cost);
strcpy_s(card->type, TYPE_SIZE, type);
strcpy_s(card->text, TEXT_SIZE, text);
strcpy_s(card->flavor, FLAVOR_SIZE, flavor);
}
main()
{
card_t* card;
init_card(card, "Brainstorm", "u", "Instant", "Draw 3 cards, then put two cards from your hand on top of your library", "flavor");
printf("%s\n", card->name);
}
编译器给出错误:使用了未初始化的局部变量“card”。我所读到的一切都表明这应该是可能的。我尝试将其更改为指向结构的指针而不是结构本身,但结果相同。我错过了什么?
【问题讨论】:
-
注意:通常情况下,
char*的缓冲区大小适合内容,而不是这些巨大的超大缓冲区,其中几乎没有任何内容。 -
strcpy_s()是什么? -
这能回答你的问题吗? Update (int) variable in C inside a function 在副本中使用
int作为类型-原理相同,您只是使用了card_t。 -
@ArkadiuszDrabczyk 它是(Windows)对 C 标准的补充,可在(有争议的,我说受到高度批评的)可选附件 K 中提供。cppreference 使用
_CRT_SECURE_NO_WARNINGS宏来禁用 Windows 上的警告。 -
@KamilCuk 会的,但我已经尝试过使用指针,编译器给出了相同的结果。我编辑了发布的代码以反映这一点。
标签: c function struct structure