【发布时间】:2012-01-04 14:59:48
【问题描述】:
我有以下sscanf 声明:
sscanf(line, "%*s %511s %511s",protocol,hexdata)
现在行由以下形式" a b c " 组成。很明显,我通过提供%*s 忽略了a 的值。我将b 和c 的值放入协议和数据中。
我想做的是我不想硬编码 511。我只是无法这样做。我尝试了以下方法,但似乎不起作用。
sprintf(log_buffer,"1234 56789");
printf("\n Buffer is : %s \n",log_buffer);
strcpy(format,"%*s "); // gives %*s
sprintf(format1, "%%%ds", 5); // gives %5s
printf("\n Format is : %s ",format);
printf("\n Format1 is : %s ",format1);
strcat(format,format1);
printf("\n new format is : %s ",format);
sscanf(log_buffer,format,name);
printf(" Name is : %s ",name);
printf(" \n Size of name %d ",strlen(name));
这给了我垃圾价值。
样本输出:
Buffer is : 1234 56789
Format is : %*s
Format1 is : %5s
new format is : %*s %5s
Name is : �
8r�2�%*s %5s
Size of name 15
这里有什么问题?我只需要防止硬编码变量字段。
【问题讨论】:
-
你的 char 数组的声明是什么样的?
-
我的声明如下 char log_buffer[20]={0},format[5]={0},name[8]={0},format1[5]={0}
-
它适用于我:ideone.com/wkWzN
-
哦,真是个大错 :( 非常感谢!我真傻。