奇怪的问题:CString str; str.Format("100%");会出错,为什么?一带%就出错,那位大侠可以告诉我为什么?

52001314 2002-12-09 03:31:32
CString str;
str.Format("100%");//这样不行。
str.Format("%s","100%");//这就可以了。

为什么?两者有什么区别?
...全文
351 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyzxg 2002-12-10
  • 打赏
  • 举报
回复
一个转移字符用得着这么长篇大论吗??
shb80 2002-12-10
  • 打赏
  • 举报
回复
不是变量非得要用.Format("%s",str),而是说你的数据是动态取来的,不是一个常量,很可能象你遇到的问题一样含有特殊字符,这时用.Format("%s",str)是最保险最稳定的设计,这样你程序的健壮性不就大大提高了。
针对你的这段代码,也可以这样解决嘛:szText=str;
zhang865 2002-12-10
  • 打赏
  • 举报
回复
str.Format("100%%");

or str.Format("100%c",'%');

str.Format("100%c",0x25);
crystal_heart 2002-12-10
  • 打赏
  • 举报
回复
up
52001314 2002-12-10
  • 打赏
  • 举报
回复
ft啊,我也知道%必须用\%或%%来表示。

可能我没把我的意思表示清楚吧。

昨天帮人家调试程序。
m_set.GetFieldValue((short)col,str);
szText.Format(_T(str));//这句出错了。

因为数据库中存了一个100%,所以出错了。以前存其他数据都没有问题的。
改为szText.Format("%s",T(str));就对了。

我想问的是.Format(str)和.Format("%s",str)有什么区别,是不是变量一定要用.Format("%s",str)?

52001314 2002-12-10
  • 打赏
  • 举报
回复
呵呵,只是有些疑问,上来讨论一下罢了。编程中总会遇到不可预见的问题。

谢谢大家的参与。
双杯献酒 2002-12-10
  • 打赏
  • 举报
回复
呵呵,不能用\%
必须用%%
Sunrain 2002-12-09
  • 打赏
  • 举报
回复
%号是format的预定义字符(给编译器识别用的)不能用!要用前面必须加上\
你咋个学cpp的哦?
"%s"表示后面是字符串,后面的字符串可以用%只要代码被编译以后里面有%当然可以
andy_lau 2002-12-09
  • 打赏
  • 举报
回复
str.Format("100\%");
52001314 2002-12-09
  • 打赏
  • 举报
回复
to xnliu:我从数据库中取出值显示,刚好取到一个100%.


但是str.Format(s1);//如果s1为不带%的字符串就一点问题都没有。

to hnyyy:是变量。我检查了很久才发现当变量中有%,str.Format(s1)不行,只能用str.Format("%s",s1);
sandliu 2002-12-09
  • 打赏
  • 举报
回复
我晕了,应该时%d,%f,呵呵
sandliu 2002-12-09
  • 打赏
  • 举报
回复
真不该犯这种错误,c语言最基础的东西,有d%,f%,哪有个100%呢?^o^
Michael_Zhang 2002-12-09
  • 打赏
  • 举报
回复
天啊,老兄,你看看scanf,printf,这几个差不多
hnyyy 2002-12-09
  • 打赏
  • 举报
回复
又没有变量,为何不直接这样?
CString str = "100%";


str.Format("%s",s1);当然可以,因为%s是有意义的。相当于
str = s1;

可单独的一个%是没有意义的,%号后必须有个d,s,f等东西。


52001314 2002-12-09
  • 打赏
  • 举报
回复
如果str.Format()只有一个参数,是不是默认参数类型为CString?

如果不是,不是都要用str.Format("%s",s1);吗?
52001314 2002-12-09
  • 打赏
  • 举报
回复
我是在程序中读入一个参数s1;
然后str.Format(s1);的,事先没想到会有%这个错误.

str.Format("%s",s1);这时候可以。为什么这时候可以?

如果"100%"被转义了,为什么编译没错啊?
zhangyilan 2002-12-09
  • 打赏
  • 举报
回复
str = ("100%");
因为Format函数的第一个参数
在程序解析时需要检查%后跟的参数 ,如%s,%d,%f等
以便调用相应的函数
Format函数的第二个参数直接作为一个字符串来处理

lsgt 2002-12-09
  • 打赏
  • 举报
回复
%号是特殊字符。如果要输出%,就要写成:

str.Format("100%%");

象你那样引号被%转意了。
DoItFreely 2002-12-09
  • 打赏
  • 举报
回复
str.Format("100\%");

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧