免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10329 | 回复: 15
打印 上一主题 下一主题

[悬赏] [请教] C程序, 反斜杠 \ 作为命令行参数,会被当做转义符还是字符反斜杠 [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2010-06-22 01:05 |只看该作者 |正序浏览
20可用积分
本帖最后由 nine8 于 2010-06-22 01:19 编辑

请教下, 当 反斜杠 出现在 命令参数中时, 会被当做转义符还是 字符 '\\' ,

通过几个小程序的测试,发现似乎会被当做转义符,不知道是什么原因, 如:

  tt aaa\bbb

----------------------------------------------------------------------------------
[1] . 只会把 \当做转义符来处理, 为什么不是当做 字符 反斜杠呢?

[2] . argv 指向字符串, 那么 \ 为什么不是 字符串中的一个字符呢?


[3] . 另外, 单一的转义符有代表什么含义? 似乎没法在C中实现单一输出转义符 \ 吧, 不知道这种获取参数中转义符是如何编写的呢?

[4].  如何编写C,才使得不把命令行参数中出现的转义符\当做转义符,而是直接当做字符 \ ?


还请大家指教

论坛徽章:
0
15 [报告]
发表于 2010-06-25 21:17 |只看该作者
两个有一个直接是本来的意思,一个的话就是转义符吧

论坛徽章:
0
14 [报告]
发表于 2010-06-25 11:37 |只看该作者
{:3_189:}学习

论坛徽章:
0
13 [报告]
发表于 2010-06-24 23:29 |只看该作者
谢谢,没本,和狗气球

CU为什么不能同时给多人评分呢

论坛徽章:
0
12 [报告]
发表于 2010-06-24 23:27 |只看该作者
呵呵,非常感谢!

论坛徽章:
0
11 [报告]
发表于 2010-06-24 04:50 |只看该作者

论坛徽章:
0
10 [报告]
发表于 2010-06-23 22:50 |只看该作者
恩,原来如此,原来shell中的转义字符与C的不一样呀,原来以为都一样

不过我用的是csh, csh接近c的语法, 不知道 csh是不是也与bash转义字符一样呢?

有没有可能csh的转义与C一样? csh好像不是GNU里的,不知道哪可以找到其像上面bash对应的文档呢?

论坛徽章:
0
9 [报告]
发表于 2010-06-23 01:16 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2010-06-22 21:38 |只看该作者
  1. 1 #include <stdio.h>
  2.       2
  3.       3
  4.       4 int main(int argc, char *argv[]) {
  5.       5
  6.       6     argv++;
  7.       7     if (**argv == '\a') {
  8.       8         printf("got it \n");
  9.       9     }
  10.      10     else if(**argv == '\\') {
  11.      11         printf("got escape\n");
  12.      12     }
  13.      13     else {
  14.      14         printf("no escape\n");
  15.      15         putchar(**argv);
  16.      16     }
  17.      17
  18.      18     return 0;
  19.      19
  20.      20 }
复制代码
如上程序,

当我执行,  tt  \a, 结果却是 "no escape",然后输出 a, 也就是没有把 \a当做一个字符,而是把其\和a当做俩个处理,\被忽略

而我执行  tt \\, 结果却是 "got escaoe", 也就是说把 \\作为反斜杠字符了,

这是为什么?难道只会对 \\转义, 其他的都不行?

按照大家上面提到的似乎不好解释这个 , 还请大家指教

论坛徽章:
0
7 [报告]
发表于 2010-06-22 11:47 |只看该作者
本帖最后由 狗气球 于 2010-06-22 11:56 编辑

转义符是解析字符串的时候起作用的。

反斜杠刚好既是C语言字符串中的转义符,也是楼主使用的shell的命令行转义符。结果搞混了。这个问题和C语言转义符没关系。

键盘输入-->(shell转义)-->传给程序的命令行参数(argv[])

****
[1] . 只会把 \当做转义符来处理, 为什么不是当做 字符 反斜杠呢?
    这个取决于你用的shell,你用的shell把反斜杠当做转义符。假如你像我现在在用windowsXP的cmd命令行,你会发现它不认为\是转义符。

[2] . argv 指向字符串, 那么 \ 为什么不是 字符串中的一个字符呢?
    因为命令行输入的单个\被shell当做转义符,没有被解释为\,所以你的程序也就没有得到你期望的\。

[3] . 另外, 单一的转义符有代表什么含义? 似乎没法在C中实现单一输出转义符 \ 吧, 不知道这种获取参数中转义符是如何编写的呢?
    单一的转义符应该不代表什么意义。
    C语言要输出‘\’没什么特别的,这本来就是个可打印字符,和'a','b'一样。
    但是,对C编译器来说,\是''和""中的转义符,为了表示真正的\字符,你只能用\\。例如'\\'代表一个反斜杠字符。"aa\\bb"代表字符串aa\bb。

[4].  如何编写C,才使得不把命令行参数中出现的转义符\当做转义符,而是直接当做字符 \ ?
    这个问题不是问题。命令行参数中的\转义符是shell决定的,和你的C程序无关。

论坛徽章:
0
6 [报告]
发表于 2010-06-22 10:53 |只看该作者
argv里的'\'都是处理好的,不用在'\\'转义了。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP