C语言学习“历险记”,学习ESP8266路上的坎坷2

1、首先说明,C的基本功还不够造成的。

2、学习char * 和 char[] 比较结果方法

3、代码如下(通过MQTT发过来的消息json格式,判断提交的token和本地8266中存的token是否一致问题)

	{
		if (cJSON_HasObjectItem(root, "Token")) {
			Token = cJSON_GetObjectItem(root, "Token");
			if (cJSON_IsString(Token)&& (Token->valuestring != NULL)) {//
				char *s = cJSON_Print(Token);//字符串带引号 "3b5677b02973e0ff2dc36a85ecb8c9e3"
				char *s1=Token->valuestring;//取值,不带引号 3b5677b02973e0ff2dc36a85ecb8c9e3
				char f[40];//不能直接赋值(如果用char*比较时长度是0,可能没分配空间)
				char *ff=(char *) os_malloc(64);//分配空间(方法2)
				ff=sysCfg.token;
				os_sprintf(f,"%s",sysCfg.token);
//				os_printf("s=%s\r\n", s);//打印该值。就是判断此值是否为合法用户
//				os_printf("s1=%s(%d byte)\r\n",s1,strlen(s1));
//				os_printf("f=%s(%d byte)\r\n",f,strlen((char*)f));
//				os_printf("ff=%s(%d byte)\r\n",ff,strlen(ff));
				if(strcmp(f,s1)==0)
				{
					os_printf("\n\n***OK(Legitimate users)\n\n");
					tokenisok=true;//合法
				}else{
					os_printf("\n\n***SORRY(Not Legitimate users)\n\n");
					tokenisok=false;//不合法
					return;
				}
				cJSON_free((void *) s);
				os_free(ff);//释放分配的空间!!!
			}
		}
	}else{
		tokenisok=false;//不合法
	}

问题:

1、如果f用 char *f 变量,结果造成 长度为0,s1长度32 结果不一样。

2、改用 char f[40]后,结果长度为32了。还有方法2,先为ff分配空间,再赋值,比较,释放空间也可以。

3、另外json解析时,一个是对象带引号,一个值不带引号的区别。

4、strcmp(s1,s2)==0标示字符串一样,不等于0则不一样。

5、char f[40]不能直接赋值,通过 os_sprintf(f,"%s",sysCfg.token);//给f[40]赋值的方法(格式化)

C语言学习“历险记”,学习ESP8266路上的坎坷2_第1张图片

问题解决!

你可能感兴趣的:(个人作品,学习笔记,物联网笔记,网络笔记,strcmp,判断合法用户,c语言比较字符串,json解析,ESP8266)