如何提供转义字符作为命令行参数

时间:2012-03-02 15:49:03

标签: c++ c

我想为我的C程序提供转义字符作为命令行参数:

#include <cstring>
#include <cstdio>
int main(int argc,char**argv){
  const char *str1 = "\t";
  const char *str2 = argv[1];
  fprintf(stderr,"str1:%s:\nstr2:%s:\n",str1,str2);
  return 0;
}

运行时,它会给出:

/a.out "\t"
str1:   :
str2:\t:

所以看起来我的\t被解释为斜杠而不是tab

是否有一个简单的解决方案,或者我是否必须检查我希望我的程序处理的每个转义字符?像这样的东西?:

char *truetab="\t";
if(argv[1][0]=='\\' && argv[1][1]=='t')
   res = truetab;

感谢。

2 个答案:

答案 0 :(得分:1)

不幸的是,你需要手动完成:处理转义序列是编译器的工作,当"hello\tworld"常量在编译代码中的字符串常量区域结束时,\t已经是替换为ASCII码9(TAB)。它不应该那么困难 - 事实上,它是经典K&R书的练习号3.2:

  

练习3-2。编写一个函数转义符(s,t),将newline和tab等字符转换为   可见的转义序列,如\ n和\ t,因为它将字符串t复制到s。使用开关。写一个   也适用于另一个方向,将转义序列转换为真实字符。

答案 1 :(得分:1)

如果你在linux中使用 bash ,你可以按 Ctrl + V 并点击标签,并用''引用它,你几乎可以通过转义字符如esc

输入:

./a.out 'Ctrl+v tab'
BTW,我不知道哪个软件提供了这个功能,也许所有类似unix的终端都可以做到这一点