【问题标题】:How to access Global Variables in C如何在 C 中访问全局变量
【发布时间】:2014-03-21 05:49:10
【问题描述】:

我正在尝试填充全局变量,但它似乎不起作用。这是我的代码。

typedef struct Global_ {

char values[3][40]

}Global_t;
//function file

GBL_PTR = calloc (1, sizeof (Global_t));
memset(GBL_PTR.values,'\0',sizeof(GBL_PTR.values));

//opening a file and reading it

sscanf(linebuf, "List of values %s , %s \n",
               GBL_PTR.values[0],
               GBL_PTR.values[1]);
printf("Why dont i see these logs %s",GBM_PTR.values[1]);

我没有看到任何崩溃,只是没有日志。编译很好。我是 C 的新手,有人可以让我知道我在这里缺少什么。主要思想是从我的函数中访问一个全局变量。我该怎么做?

【问题讨论】:

  • 能否指定GBL_PTR的声明?
  • 没有崩溃;编译得很好;那有什么问题呢?另外,全局变量在哪里,初始化它们的函数在哪里(或者它们的全局初始化在哪里)?
  • 如果它是一个指针,您无法访问 GBL_PTR.values .. 您的程序是否正在编译? .. 它应该是 GBL_PTR->values
  • 你初始化GBL_PTR引用的数据;您打印由GBM_PTR 引用的数据。你期待什么?如果这不是您遇到问题的确切代码,我们应该如何帮助您调试它?
  • 请给我们代码,我们可以自己编译而无需修改任何东西。

标签: c function structure


【解决方案1】:

您的代码中有一些错误, (1)char values[3][40]后面少了一个分号

(2)calloc的返回类型为void*,所以使用Global_t* GBL_PTR = (Global_t*)calloc (1, sizeof (Global_t));

(3) 因为GBL_PTR的类型是一个指针,所以可以这样访问valuesGBL_PTR->values(*GBL_PTR)values

typedef struct Global_ {

    char values[3][40];

}Global_t;
//function file

Global_t* GBL_PTR = (Global_t*)calloc (1, sizeof (Global_t));
memset(&(GBL_PTR->values),'\0',sizeof(GBL_PTR->values));

//opening a file and reading it
char* linebuf= "List of values wang , yang \n";
sscanf(linebuf, "List of values %s , %s \n",
    GBL_PTR->values[0],
    GBL_PTR->values[1]);
printf("Why dont i see these logs %s\n", GBL_PTR->values[1]);

【讨论】:

    【解决方案2】:

    你忘记了GBL_PTR的类型,应该是:

    Global_t *GBL_PTR = calloc(1, sizeof (Global_t));
    

    GBL_PTR 是一个指针,因此请在任何地方使用 ->operator 而不是 . 运算符。

    GBL_PTR->values
    GBL_PTR->values[0]
    

    等等……

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 2021-01-19
      • 1970-01-01
      • 2016-05-04
      • 2021-11-24
      • 2012-11-16
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多