我正在尝试填充全局变量,但它似乎无法正常工作。这是我的代码。
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的新手,有人能让我知道我在这里失踪了什么。主要思想是从我的函数中访问一个全局变量。我该怎么做?
答案 0 :(得分:1)
你忘记了GBL_PTR的类型,它应该是:
Global_t *GBL_PTR = calloc(1, sizeof (Global_t));
GBL_PTR是一个指针,因此在任何地方都使用->
运算符而不是.
运算符。
GBL_PTR->values
GBL_PTR->values[0]
等...
答案 1 :(得分:1)
你的代码有些错误,
(1)在char values[3][40]
(2)calloc
的返回类型为void*
,因此请使用Global_t* GBL_PTR = (Global_t*)calloc (1, sizeof (Global_t));
(3)因为GBL_PTR
的类型是指针,所以您可以像values
或GBL_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]);