sscanf()函数的问题

temp="0.05~1.00";
sscanf(temp, "%[^~]", frepre);
MessageBox(frepre, "第一个频率");
sscanf(temp, "%*[^~]~%s", frebeh);
MessageBox(frebeh, "第二个频率");
运行时没问题,调试时就会发现frepre与frebeh的值总是一样,这是为什么。再我的程序之后的操作,就会出现意想不到的结果了!
问题我知道了,因为
sscanf(temp, "%[^~]", frepre);
sscanf(temp, "%*[^~]~%s", frebeh);

这里frepre,frebeh两个变量,我定义成CString型的对象。所以总是出BUg,不仅仅是它俩的值一样,凡是程序中随便定义的CString 对象,在调试时,他们的值都一样!!只有把frepre,frebeh定义为字符数组,才把这个问题解决掉!

是不是 MessageBox 函数问题, MFC 还是 API

用 c 可以判断 sscanf() 没问题:
main() {
char frepre[10],frebeh[10];
char temp[] ="0.05~1.00";
sscanf(temp, "%[^~]", frepre);
sscanf(temp, "%*[^~]~%s", frebeh);
printf("%s %s",frepre,frebeh);

}
输出:
0.05 1.00
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-20
调试时就会发现frepre与frebeh的值也不一样。
char temp[]="0.05~1.00";
char frepre[20];
char frebeh[20];
sscanf(temp, "%[^~]", frepre);
printf("第一个频率 %s", frepre);
sscanf(temp, "%*[^~]~%s", frebeh);
printf("第二个频率 %s", frebeh);

单片机sscanf函数问题
红色部分表示读到的变量数量少于2(比如数据为12:30时可以读到2个变量,如果是12则只能读到一个变量),或者没有读到。sscanf的输入是字符串变量,而scanf的输入是控制台,对单片机来说,scanf的输入一般指串口输入。

sscanf函数---一个简单的问题
这个问题不简单,只用一句sscanf是没有办法实现你的要求,而且用ssanf也不是好的方法, strtok虽然也不好,但这这里比sscanf的方案好。 如果非用sscanf,则需要间接转换,如下:int n;int *pa = a;char ch[5]; \/* 最大5位数,可修改*\/char *ps = s;while( sscanf(ps, "%[^ ] %n", c...

c语言关于scanf的问题
首先,scanf,sscanf这类输入函数是支持一些简单的正则表达式。scanf("as%s",j); 的正则表达式就是"as%s",即限制输入要从as开始匹配,如果匹配不了,则认为输入错误,即相当于没有输入。如果匹配到as则后面的%s会把输入存放到f这个数组里。你可以试试这样的输入语句scanf("%*[^#]%s", j);它的...

MFC中使用sscanf获取CString字符串中的数据
RT,通过问题排查,我大致可以确定sscan()函数的使用上或者强制类型装上出现了问题。在VS2015环境下,sscanf的第一个参数不接受CString类型(所以第一个参数使用timestr.GetBuffer(MA... RT,通过问题排查,我大致可以确定sscan()函数的使用上或者强制类型装上出现了问题。在VS2015环境下,sscanf的第一个参数不接受CString...

C++用SSCANF函数提取出现的问题
&x2,s3,&y2);以逗号为分格符,跳过一个字符串用:sscanf(str,"%*[^','],%lf, %lf,%*[^','],%lf,%*[^','],%lf",&x,&y,&x2,&y2);=== 注意,跳过用 %*[^','] ,后面无 s1 。。。读 用 %[^','] , 后面有 s1 。。。其它问题也解决了。

sscanf函数的问题
格式化输入,将字符串"NUMPOLLIES %d\\n" %d是&numtriangles的整型值 保存到oneline(应该是字符数组)

sscanf函数问题 123\/456\/789\/abc.xxx 怎么提取最后一个\/之后的内容?最...
include <stdio.h>#include <string.h>int main(){ char b[20], c[20]; scanf("%s", b); do { sscanf(b, "%*[^\/]\/%s", c); sprintf(b, "%s", c); }while(strstr(c, "\/")); printf("%s\\n", c); return 0;}测试 输入:123\/456\/789\/abc...

关于sscanf的问题
sscanf(...,"%lf\\t",d);可以读 具体你看下面的msdn吧 Read formatted data from a string. These functions are deprecated because more secure versions are available; see sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l.int sscanf(const char *buffer,const char *format [,argument ...

C++用SSCANF函数提取出现的问题
&x2,s3,&y2);以逗号为分格符,跳过一个字符串用:sscanf(str,"%*[^','],%lf, %lf,%*[^','],%lf,%*[^','],%lf",&x,&y,&x2,&y2);=== 注意,跳过用 %*[^','] ,后面无 s1 。。。读 用 %[^','] , 后面有 s1 。。。其它问题也解决了。

c语言用scanf( )时遇到一个难题
这个小问题还真是很让人费神的。首先,scanf 按格式串去转换,如你的例子, 当输入串中不够3个数时, 函数并不退出,一定要等到转换够了3个数, 除非是按Ctrl+z结束, 但这并不符合人们的输入习惯。其次,当输入了多于3个数时, scanf只转换了前三个, 后边的会留在输入流中,等下一个输入...

相似回答
大家正在搜