【问题标题】:Unable to create global array of structs无法创建全局结构数组
【发布时间】:2018-09-13 05:29:00
【问题描述】:

我正在尝试创建一个全局结构数组,但是我认为我会这样做的方式行不通。对于我需要的应用程序,它需要是全局的,但是直到在 main() 函数内部才知道大小。我的代码如下:

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//
struct player {
    char letter;
};

struct player *players;

int main(int argc, char** argv){
    check _variables();
    int *inpBuff;
    inpBuff = convert_input(argv[1], argv[2]);
    int numPlayers = inpBuff[0];
    players =  malloc(numPlayers*sizeof(player));
    return 1;
}

我收到错误: 错误:“播放器”未声明(在此函数中首次使用) 玩家 = malloc(numPlayers*sizeof(player));

【问题讨论】:

  • 结构体名为struct player
  • @immibis 我是 C 新手,你能告诉我char** argv 有什么用吗?为什么在 char 后面有两个 **
  • @ZeeshanAdil 这是一个链接以便更好地理解:geeksforgeeks.org/command-line-arguments-in-c-cpp
  • @user10334659 感谢分享,去看看! :)
  • 1 不是可移植的退出状态。在至少一个系统上它意味着“成功”,但在 Unix/Windows 上它是一个错误代码。 main 的可移植返回值是 0EXIT_SUCCESS 表示成功,EXIT_FAILURE 表示失败。

标签: c arrays structure


【解决方案1】:

错误来源--> 您在 malloc 中使用的是 player 而不是 players,这是不正确的。 Player 是struct 的名字,你需要malloc 中的指针名字。

首先 --> 你需要更正你的malloc 语句 --> 使用players = malloc(numPlayers*(sizeof(*players));

第二 --> 当main() 函数的返回类型为int 时,您的return 语句似乎丢失了。

【讨论】:

  • 你提出的第一点并没有阻止我收到错误:错误:'player' undeclared (first use in this function) player = malloc(numPlayers*sizeof(player));至于你的第二点,这是因为我只发布了代码的 sn-p 而忘记了返回。
  • returnmain 中是可选的。从 C99 开始,运行结束 main 会自动返回 0
猜你喜欢
  • 1970-01-01
  • 2020-04-20
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多