printf忽略单反斜杠’\’

我有这个代码:

int main(int argc, char * argv[]) { int i; printf("%d%s",argc,argv[1]); return 0; } 

如果我将此代码作为a.out a\=b=运行a.out a\=b= 。我正在使用C-shell

它的输出是“ a=b= ”是否有任何方式可以将其输出更改为“ a\=b= ”。

已编辑问题的更新

将命令行参数括在引号中:

  $ a.out "a\=b=" 

引号阻止shell以任何方式解释命令行参数,因此只需将此字符串传递给您的程序。 我使用csh / bash ..works。

或者,你可以用另一个“逃避” \并跳过双引号:

  $ a.out a\\=b= 

原始问题的上一个答案

是的,使用两个\

 char a[]="a\\=b="; 

输出:

 a\=b= 

说明

\是用于表示特殊字符序列的转义字符,因此例如\t表示选项卡。 如果你想实际打印\t ,你需要用另一个\来“逃避”这个\ 。 看到这个例子和输出:

 printf("\t-->Hi\n"); /* print regular tab via \t */ printf("\\t-->Hi\n"); /* want to print "\t", not tab ..so we use two \\ */ 

这导致:

  -->Hi \t-->Hi 

不是 printf()函数所独有的,也不是C语言的唯一,语言可以使用反斜杠来表示字符串中的“转义序列”。

printf()不会忽略你的单反斜杠,而是解析C字符串的方式。 反斜杠是一个转义字符,表示某些字符不容易输入字符串,例如换行符( \n )或嵌入引号( \" )。因此,要包含反斜杠,必须包含两个反斜杠( \\ )这适用于所有字符串,与printf()无关。

\是C中字符串中的转义字符。您可以使用它来访问特殊字符,例如换行符( \n )。 如果你想作为一个角色访问\ ,你需要逃避它: \\

\\是C中读作的\

\是C中字符或字符串内使用的唯一字符,表示其他字符或字符串。 这就是“逃脱”这个名字的意思。

因为它以这种方式使用,所以有必要将反斜杠本身包括在由这样的序列可指示的符号之一中。

其他一些序列是:\ n新行\ t制表符\ v垂直制表符\警报铃声