結構體指標的應用理解
在cjson呼叫時遇到的結構體引數賦值時的問題,需要cJSON**才行,下面兩種方法都行,對比一下。
也對指標理解更深入:
結構體給函式當形參時,由於主函式裡也沒分配結構體空間,只有結構體的地址,區域性函式裡面只能給區域性結構體地址,給結構體的地址放在結構體地址的空間中,要有存放結構體地址空間的地址,也就是下面例子中的cJSON**
#include <stdio.h>#include <stdlib.h>
#include "cJSON.h"
/* Parse text to JSON, then render back to text, and print! */
//1、使用返回值進行,返回jSON*
/*cJSON *doit(char *text)
{
char *out;//cJSON *json;
int flag = 0;
cJSON *c = cJSON_Parse(text);
//printf("text = %s\n", text);
return c;
}
*/
//2、使用jSON**給形參
void doit2(char *text,cJSON** root)
{
char *out;
*root = cJSON_Parse(text);
printf("doit2 text = %s\n", text);
}
int main (int argc, const char * argv[])
{
/* a bunch of json: */
char sensorValue[] = "{\"WIFIessid\":[{\"ESSID\":\"ylst-s\"},{\"ESSID\":\"mordenmansion\"},{\"ESSID\":\"ChinaNet-wvQS\"},{\"ESSID\":\"CMCC\"},{\"ESSID\":\"CMCC-AUTO\"},{\"ESSID\":\"beacon05\"},{\"ESSID\":\"cnswx\"}]}";
//cJSON *root = (cJSON*)malloc(sizeof(cJSON));
//1、使用返回值進行,返回cJSON*
/*cJSON *root;
char *out;
root = doit(sensorValue);
printf("222 root->type = %d\n", root->type);
out=cJSON_Print(root);
cJSON_Delete(root);
printf("doit:%s\n",out);
*/
//2、使用cJSON**給形參
cJSON *root;
char *out;
doit2(sensorValue,&root);
printf("222 root->type = %d\n", root->type);
out=cJSON_Print(root);
cJSON_Delete(root);
printf("doit2:%s\n",out);
//char * out= NULL;printf("AAABBB\n");
//out = cJSON_Print(root);printf("AAABBB\n");
//printf("AAAAAAAAAAA\n%s\n",out);
return 0;
}