我有一个像next的代码,messagecmdbuf是" 1005 1 7 null"但是当我调用sscanf时,转换结果是1005 0 7 null。
char * messagecmdbuf=(char *)malloc(BUFSIZE);
char * tmp_module_mask= (char *)malloc(MININASQQIOT_MODULE_LENGTH);
int tmplogflg;
unsigned char tmp_level_mask;
int tmp=-1;
int nGUIDSize = 0;
int cmd=0;
memset(tmp_module_mask,0,MININASQQIOT_MODULE_LENGTH);
tmp=sscanf(messagecmdbuf,"%d %d %d %s",&cmd,&tmplogflg,&tmp_level_mask,tmp_module_mask);
printf("net_client_response para---%d %d %d %d %s",tmp,cmd,tmplogflg,tmp_level_mask,tmp_module_mask);
linux gdb结果
答案 0 :(得分:1)
您正在看到未定义行为的症状。
在行中:
.travis.yml
tmp=sscanf(messagecmdbuf,"%d %d %d %s",&cmd,&tmplogflg,&tmp_level_mask,tmp_module_mask);
的类型为&tmp_level_mask
,而预期参数类型为unsigned char*
。
您可以通过以下方式解决此问题:
使用格式说明符int*
来读取数据:
%hhu
或使用tmp=sscanf(messagecmdbuf,"%d %d %hhu %s",&cmd,&tmplogflg,&tmp_level_mask,tmp_module_mask);
类型的变量来读取数据:
int