int main(int argc, char **argv) {
char *str;
str = argv[1];
printf("%s", str);
return 0; }
使用以下两个字符串执行程序时:
$./program "\abc"
$./program "\\abc"
两次运行都将与str
相同的字符串存储在str = \\abc
变量中。
在使用\\abc
运行时如何获得四个反斜杠,或者在使用\abc
运行时如何获得一个反斜杠?
答案 0 :(得分:1)
您将永远不会从\\
得到四个反斜杠,但是如果您想按字面地传递字符串,请使用single quotes:
将字符括在单引号(
'
)中可保留引号内每个字符的字面值。即使在前面加上反斜杠,也不能在单引号之间引起单引号。
例如:
./program '\abc' # passes a four-character string: \ a b c
./program '\\abc' # passes a five-character string: \ \ a b c
答案 1 :(得分:0)
我假设您正在控制台中使用Bash。您的问题与C无关,与 Bash 如何处理字符串无关。根据{{1}}:
用双引号引起来的字符会保留所有引号内的字符的字面值,但$,`,\和启用历史记录扩展的字符除外!当外壳处于posix模式时,!没有特殊的双引号的含义,就是使历史扩展时也是如此。字符$和`在双引号中保留其特殊含义。 反斜杠仅在其后跟以下字符之一时保留其特殊含义:$,`,“,\或换行符。。双引号中的双引号可能会在反引号前加上反斜杠。如果启用,将执行历史记录扩展,除非使用反斜杠将双引号引起的!进行转义。不删除!之前的反斜杠。
因此在Bash中,man
和"\a"
都被视为与“ \ a”相同。如果要在双引号中包含四个反斜杠,则需要编写其中的8个。尝试"\\a"