返回   cpper编程论坛 > Zion/测试
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

Zion/测试 惹人烦的东西这边来

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2004-01-20
高级会员
 
注册日期: 2003-08-02
帖子: 105
koolplay 正向着好的方向发展
默认 为什么这个参数是"\\0"而不是"\0"呢?

有以下一段程序:
void CFileDlgTestDlg::ReplaceToZero(const CString &str, const CString &strFrom, char *pResult)
{
int pos1=0,pos2=0;
int cur=0,len=strFrom.GetLength();
while((pos2=str.Find(strFrom,pos1))!=-1)
{
while(pos2>pos1)
pResult[cur++]=str[pos1++];
pResult[cur++]='\0';
pos1=pos2+len;
}
}
作用是把str里的指定字符(也就是strFrom)替换成ASCII码为0的字符,把结果传给pResult。但是调用的时候是ReplaceToZero(m_strFilter,"\\0",cBuffer),目的是把m_strFilter中的"\"和"0"的组合替换成ASCII码为0的字符。但为什么第2个参数是"\\0"而不是"\0"呢?我用"\0"时出现非法操作的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2004-01-20
Elminster 的头像
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认

我 faint !
C 的转义字符你总知道吧?"\0" 只代表一个 ASCII 值为 0 的字符,"\\0"才代表一个"\"和"0"的组合。

摇头,叹气 …………
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2004-01-20
高级会员
 
注册日期: 2003-08-02
帖子: 105
koolplay 正向着好的方向发展
默认

但是第2个参数是CString类型的,Cstring类型不是没有转意字符的吗?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2004-01-20
Elminster 的头像
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认

引用:
作者: koolplay
但是第2个参数是CString类型的,Cstring类型不是没有转意字符的吗?
…………
这是谁告诉你的呀?CString s("this is a test\n"); 这最后的"\n"是不是转义字符?你还是回头拿起你的 C++ 教科书,先好好地、仔细地从头温习一遍,好歹把基础内容搞扎实了再说,不然的话这么写程序纯粹是在浪费时间。
言尽于此,再有类似的问题我也懒得答了,你好自为之吧。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #5 (permalink)  
旧 2004-01-21
高级会员
 
注册日期: 2002-09-19
帖子: 840
文章: 7
tomato 正向着好的方向发展
默认

引用:
作者: koolplay
但是第2个参数是CString类型的,Cstring类型不是没有转意字符的吗?
我觉得你问的问题要么是很基础的c++知识,要么就是看不懂msdn(根本原因还是不懂c++)
所以我建议学vc、mfc之前应该先把c++学好

我相信8级过了的人若是不懂c++也看不懂msdn中vc的内容的
这不仅仅是英语的问题
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #6 (permalink)  
旧 2004-01-23
高级会员
 
注册日期: 2003-08-02
帖子: 105
koolplay 正向着好的方向发展
默认

引用:
作者: Elminster
引用:
作者: koolplay
但是第2个参数是CString类型的,Cstring类型不是没有转意字符的吗?
…………
这是谁告诉你的呀?CString s("this is a test\n"); 这最后的"\n"是不是转义字符?你还是回头拿起你的 C++ 教科书,先好好地、仔细地从头温习一遍,好歹把基础内容搞扎实了再说,不然的话这么写程序纯粹是在浪费时间。
言尽于此,再有类似的问题我也懒得答了,你好自为之吧。
这是某本书上说的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #7 (permalink)  
旧 2004-01-23
abp 的头像
abp abp 当前离线
高级会员
 
注册日期: 2002-08-30
帖子: 811
abp 正向着好的方向发展
默认

引用:
作者: koolplay
引用:
作者: Elminster
引用:
作者: koolplay
但是第2个参数是CString类型的,Cstring类型不是没有转意字符的吗?
…………
这是谁告诉你的呀?CString s("this is a test\n"); 这最后的"\n"是不是转义字符?你还是回头拿起你的 C++ 教科书,先好好地、仔细地从头温习一遍,好歹把基础内容搞扎实了再说,不然的话这么写程序纯粹是在浪费时间。
言尽于此,再有类似的问题我也懒得答了,你好自为之吧。
这是某本书上说的。
哪本书,如果常见,告诉我第几页,否则请把原文打出来。我相信多半是你理解错误。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #8 (permalink)  
旧 2004-01-30
高级会员
 
注册日期: 2003-08-02
帖子: 105
koolplay 正向着好的方向发展
默认

不是常见书。这本书挺烂的。但初学比较容易上手,但是作者的错误好像也挺多(未经证实)。
这个程序的目的是利用各种参数显示不同风格的CFileDialog。其中一个combo控件和一个CString变量绑定,作用是选择过滤字符串。主对话框上有个按钮,按了它就构造一个CFileDialog,并传递给它参数,并让它显示。用UpdateData函数把combo控件内的字符串传递给那个绑定的CString变量。书上说:用户在“过滤字符串”编辑框输入了“\0”,本意是表示ASCII码为0的那个字符,但字符串保存在CString类型的关联变量却变成了字符“\”和字符“0”,而在一个CString类型的变量中“\”是没有转义作用的(原文如此),这样就需要一个专门的函数来把字符“\”和“0”的组合替换成ASCII码为0的字符(也就是ReplaceToZero函数)。但是书上在传递参数时却用"\\0"作为第2个参数,所以让我感到奇怪了。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #9 (permalink)  
旧 2004-02-04
高级会员
 
注册日期: 2003-08-02
帖子: 105
koolplay 正向着好的方向发展
默认

既然把我的问题专门列出来了,那我也干脆把我已经有些搞明白的问题自圆其说一下吧。造成这个问题的原因有二。一是这本书本身就说错了,误导了我。其二是我没有真正明白转义字符的含义。转义字符是为了让编译器使用的。比如这个问题,之所以代参数时用"\\0",是因为代参数是要通过编译器检测的,这里必须让编译器知道我代的参数其实是"\"和ASCII0。而用UpdateData函数像绑定的变量传值,变量获得值时编译器根本就没有做任何事,其实这是程序本身的事,而程序本身不把"\"当作转义字符看,所以如果要让程序把CString变量中的"\"当作转义字符就需要自己编函数了。可能我的表达方面有些问题,但大体意思就是这样。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #10 (permalink)  
旧 2004-02-06
普通会员
 
注册日期: 2002-11-23
帖子: 99
smille 正向着好的方向发展
默认

引用:
作者: koolplay
既然把我的问题专门列出来了,那我也干脆把我已经有些搞明白的问题自圆其说一下吧。造成这个问题的原因有二。一是这本书本身就说错了,误导了我。其二是我没有真正明白转义字符的含义。转义字符是为了让编译器使用的。比如这个问题,之所以代参数时用"\\0",是因为代参数是要通过编译器检测的,这里必须让编译器知道我代的参数其实是"\"和ASCII0。而用UpdateData函数像绑定的变量传值,变量获得值时编译器根本就没有做任何事,其实这是程序本身的事,而程序本身不把"\"当作转义字符看,所以如果要让程序把CString变量中的"\"当作转义字符就需要自己编函数了。可能我的表达方面有些问题,但大体意思就是这样。
看了一下你贴出的书里的说法,没看出有什么不对。如果说有什么不对,那就是作者没有料到有读者连转义字符串的意义都不懂的,或者没有强调程序的动静态语义的区别。这不能怪作者,转义字符属于语言基本知识,没有必要在一个讲应用的上下文里重复。当然这个函数名也取得不好,函数名应该在语义上比其实现的操作要高级,ReplaceToZero只是在同样的操作层面上重复了函数的定义。建议下次遇到类似问题先翻语法书。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签
主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 02:16 AM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0