首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双反斜杠和单反斜杠导致命令行上的字符串相同。

双反斜杠和单反斜杠导致命令行上的字符串相同。
EN

Stack Overflow用户
提问于 2019-02-02 10:51:31
回答 2查看 2.4K关注 0票数 0
代码语言:javascript
复制
int main(int argc, char **argv) {
char *str;
str = argv[1]; 
printf("%s", str);
return 0; }

当程序使用这两个字符串执行时:

代码语言:javascript
复制
$./program "\abc"
$./program "\\abc"

两个run都在str变量中存储相同的字符串,如str = \\abc

使用\\abc运行时如何获得四个反斜杠,与\abc一起运行时如何获得单个反斜杠?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-02 11:16:53

您将永远不会从\\获得四个反斜杠,但是如果您想从字面上传递字符串,请使用单引号

单引号(')中包含的字符保留引号中每个字符的文字值。单引号之间可能不会出现单引号,即使在前面加上反斜杠时也是如此。

例如:

代码语言:javascript
复制
./program '\abc'   # passes a four-character string: \ a b c
./program '\\abc'  # passes a five-character string: \ \ a b c
票数 1
EN

Stack Overflow用户

发布于 2019-02-02 11:17:01

我猜你在你的控制台里使用了Bash。您的问题与C无关,而不是Bash进程字符串。根据man

双引号中包含的字符保留引号中所有字符的文字值,除$外,, \, and, when history expansion is enabled, !. When the shell is in posix mode, the ! has no special meaning within double quotes, even when history expansion is enabled. The characters $ and在双引号中保留其特殊意义。反斜杠只有在后面跟着下列字符之一时才保留其特殊意义:$、`、“、\或换行符。双引号可以在双引号中以反斜杠形式引用。如果启用了历史扩展,则将执行历史扩展,除非使用反斜杠转义出现在双引号中的a!。

因此,在Bash中,"\a""\\a"都被视为“a”。如果你想在双引号中有四个反斜杠,你需要写其中的8个。试试echo "\\\\\\\\"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54492324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档