我使用sscanf转换字符串以找到错误

时间:2015-10-23 03:39:38

标签: c

我有一个像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结果

1 个答案:

答案 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