c语言转义字符的输出

hit_liuanhuaming 2010-06-17 09:11:23
请教一个输出路径名的问题,如路径C:\Program Files\360safe\360Safebox,事先声明一下,这个路径是用驱动程序从底层得到的,不能改变,即不可以将字符'\'用'\\'代替,也不能逐次判断字符,找到'\',然后用'\\'或'/'代替,因为转义字符'\'在c语言中是得不到的,已经做过测试了,像C:\\program\360 字符长度只有12,没有'\'的3个长度,请问一下各位高手,怎么能用printf打印出该路径……等等等
...全文
734 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hit_liuanhuaming 2010-06-20
  • 打赏
  • 举报
回复
我的问题解决了,虽然没有一个回答令我满意的,不过还是散分了……再次感谢大家的回答
赵4老师 2010-06-18
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
无汇编无真相!
Tiger-1985 2010-06-18
  • 打赏
  • 举报
回复
很明显,这个是驱动程序有问题
它给你一个错误值,你又怎么能把它转换成一个正确值呢
不要在这上面花时间了,抓住问题的本质
jvs 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
引用楼主 hit_liuanhuaming 的回复:
请教一个输出路径名的问题,如路径C:\Program Files\360safe\360Safebox,事先声明一下,这个路径是用驱动程序从底层得到的,不能改变,即不可以将字符'\'用'\\'代替,也不能逐次判断字符,找到'\',然后用'\\'或'/'代替,因为转义字符'\'在c语言中是得不到的,已经做过测试了,像C:\\program\36……
[/Quote]
这是可以肯定的
ForestDB 2010-06-18
  • 打赏
  • 举报
回复
LZ理解有偏差,只有0x5C(内存中存的)或者'\\'(这是一个字符,表示\的字面值)。
CVA4508M 2010-06-18
  • 打赏
  • 举报
回复
'\'是当然找不到的。。。汗,楼主该复习C语言了。。

但你可以找到'\3'和'\P'然后把它替换成"\\3"和"\\P"
CVA4508M 2010-06-18
  • 打赏
  • 举报
回复
说白了,是驱动传上来的路径不是一个合法路径
驱动谁写的?找他改BUG去。。。
arong1234 2010-06-17
  • 打赏
  • 举报
回复
这个问题完全出于对于\的误解!'\'不是个字符,'\\'才是。你从驱动里得到的永远时'\\',而不可能时'\'!而\作为转义符出现,永远只有在你以显式字符串方式写在代码里才是,任何其他情况都不会出现你所担心的东西[Quote=引用 9 楼 hit_liuanhuaming 的回复:]
能找到也行,现在的问题是这个'\'根本得不到…也就是说不能用char path[i]=='\'判断,因为'\'在c语言中是不当做字符处理的,而且微软出品的文件路径恰好是以'\'隔开,确实是个悲剧,用驱动程序从底层传上来的路径根本没法写到数据库里面显示出来
[/Quote]
hit_liuanhuaming 2010-06-17
  • 打赏
  • 举报
回复
能找到也行,现在的问题是这个'\'根本得不到…也就是说不能用char path[i]=='\'判断,因为'\'在c语言中是不当做字符处理的,而且微软出品的文件路径恰好是以'\'隔开,确实是个悲剧,用驱动程序从底层传上来的路径根本没法写到数据库里面显示出来
东莞某某某 2010-06-17
  • 打赏
  • 举报
回复
没办法了吧,除非费个劲在路径找到合适的位置,插入'\\'
arong1234 2010-06-17
  • 打赏
  • 举报
回复
这种问题只有在你代码里写死了路径才会这样,驱动里得到绝对不可能有你这种问题[Quote=引用 3 楼 brookmill 的回复:]
我刚试了一下,如果是 char *path1 = "C:\Program Files\360safe\360Safebox";
从gdb里看到 path1[0]是'C',path1[1]是':',path1[2]是'P'
\360 就更杯具了,被当成了一个字符
(gdb) print path1
$1 = 0x400638 "C:Program FilesðsafeðSafebox"

……
[/Quote]
brookmill 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mstlq 的回复:]
\P \36都被转义了。。。
[/Quote]
如果路径里刚好有\n \r \t 之类的,那就更乱了
mstlq 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 brookmill 的回复:]
我刚试了一下,如果是 char *path1 = "C:\Program Files\360safe\360Safebox";
从gdb里看到 path1[0]是'C',path1[1]是':',path1[2]是'P'
\360 就更杯具了,被当成了一个字符
(gdb) print path1
$1 = 0x400638 "C:Program FilesðsafeðSafebox"

……
[/Quote]
\P \36都被转义了。。。
hit_liuanhuaming 2010-06-17
  • 打赏
  • 举报
回复
驱动程序得到的路径如果会自动换行成“C:\\Program Files\\360safe\\360Safebox”的话,那么用printf打印的话应该会显示成C:\Program Files\360safe\360Safebox,而结果是“C:Program Files360safe360Safebox”,除了以上几种方法,还有别的么
brookmill 2010-06-17
  • 打赏
  • 举报
回复
我刚试了一下,如果是 char *path1 = "C:\Program Files\360safe\360Safebox";
从gdb里看到 path1[0]是'C',path1[1]是':',path1[2]是'P'
\360 就更杯具了,被当成了一个字符
(gdb) print path1
$1 = 0x400638 "C:Program FilesðsafeðSafebox"

如果这就是驱动程序提供的,好像就没办法了。
mstlq 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 hit_liuanhuaming 的回复:]
请教一个输出路径名的问题,如路径C:\Program Files\360safe\360Safebox,事先声明一下,这个路径是用驱动程序从底层得到的,不能改变,即不可以将字符'\'用'\\'代替,也不能逐次判断字符,找到'\',然后用'\\'或'/'代替,因为转义字符'\'在c语言中是得不到的,已经做过测试了,像C:\\program\360 字符长度只有12,没有'\'的3个长度,请问一下各位……
[/Quote]
驱动得到的C:\Program Files\360safe\360Safebox,会“自动转换”成"C:\\Program Files\\360safe\\360Safebox",这个楼主可以放心
CVA4508M 2010-06-17
  • 打赏
  • 举报
回复
C语言里的斜杠只有一种表达方法,就是"\\"
无论是驱动代码,还是什么代码,

具体说说你这么测试出来
C:\\program\360 字符长度只有12的
本资源系统地介绍了C语言转义字符的原理和应用,包括转义字符的概念、分类、表示、作用等内容,以及如何用转义字符表示ASCII码、控制字符、特殊字符等。本资源适合C语言基础学习者和考生使用,帮助他们深入理解和掌握C语言转义字符的原理和应用,提高C语言的能力和水平。 提供了多种字符编码和转换的功能,如输入和输出字符的实体、ASCII码、八进制转义字符、十六进制转义字符等,以及支持多个字符的批量转换和显示。本资源适合C语言编码和转换的学习者和工程师使用,帮助他们通过Web界面来进行C语言转义字符的编码和转换,提高字符的知识和水平 从基础到进阶,逐步讲解了C语言转义字符的方法、技术和代码,以及C语言转义字符的实际输出和效果。本资源利用多个实例,如打印文件路径、输出控制字符、显示特殊字符等,展示了C语言转义字符的用法和作用,以及相关的概念和知识,如ASCII码、字符集、字符串等。本资源适合C语言教学和学习的教师和学生使用,帮助他们通过视频和代码来观看和学习C语言转义字符的教学和输出,提高编程的兴趣和能力。 从基础到进阶,逐步讲解了C语言转义字符的方法、技术和代码,以及C语言转义字符的实际输出和效果

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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