
(求助)C++或MFC中关于转义字符的处理
1个回答
展开全部
不需要转换。你理解错了,不是系统将“\”处理为转义字符,而是编译器把用引号括起来的串里面的\作为转义字符的开始。转义字符是专门给编译器看的。
也就是说只有在代码中写的"C:\\1.txt"这种地方才会有转义字符,真正程序编译完毕之后就不存在转义的问题了。程序编译完毕之后,上面的字符串就变为了C:\1.txt。
比如你在一个文本文件中写了
C:\1.txt,然后你用程序读取这个文件,这里面的\就不会被转义了,因为转义只是在编译这步进行的。
也就是说,转义可以理解为是只在代码中存在的一种特殊写法,好比是程序员给编译器写的暗号,你要在代码中写“\”,就必须写成“\\”,但是实际上的本意还是“\”,字符串“\\\\”的长度是2而不是4(不包括尾部\0的话),因为编译器会把\\认为是一个字符,编译完毕之后\\会变成\。
——————————————————————————————
补充:你那个问题绝对不会是转义字符没有转换造成的,可能是其它原因,多贴点代码出来看看。
——————————————————————————
再补充:pFrom要指向一个双\0结尾的字符串才行。
在
temp.pFrom=pApp->filename;
这句的前面加上一句:
pApp->filename+='\0';
再试试,应该就没有问题了。
也就是说只有在代码中写的"C:\\1.txt"这种地方才会有转义字符,真正程序编译完毕之后就不存在转义的问题了。程序编译完毕之后,上面的字符串就变为了C:\1.txt。
比如你在一个文本文件中写了
C:\1.txt,然后你用程序读取这个文件,这里面的\就不会被转义了,因为转义只是在编译这步进行的。
也就是说,转义可以理解为是只在代码中存在的一种特殊写法,好比是程序员给编译器写的暗号,你要在代码中写“\”,就必须写成“\\”,但是实际上的本意还是“\”,字符串“\\\\”的长度是2而不是4(不包括尾部\0的话),因为编译器会把\\认为是一个字符,编译完毕之后\\会变成\。
——————————————————————————————
补充:你那个问题绝对不会是转义字符没有转换造成的,可能是其它原因,多贴点代码出来看看。
——————————————————————————
再补充:pFrom要指向一个双\0结尾的字符串才行。
在
temp.pFrom=pApp->filename;
这句的前面加上一句:
pApp->filename+='\0';
再试试,应该就没有问题了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询