两手空空儿 发表于 2022-9-7 19:10:40

关于字符串中的“\”,让我迷惑

const char *letters[] = {
"\
\########@\
\##      @\
\##      @\
\######@\
\##      @\
\##      @\
\##      @\
",

这是第28课课后题最后一道, 这里用了大量的“\”和回车的组合,在读取这个字符串的时候直接忽略了“\”的存在
谁能告诉我单独用“\”是一个什么用法?

#include<stdio.h>

const char ch[] =
"\\\###@\
";

int main(void)
{
        printf("%s", ch);
       
        return 0;
}

这段代码会输出 \###@第3个和最后一个“\”都会被忽略,这个我很迷惑。。。。。。
请各位大佬们出手相助,在此谢过~~~~

gandixiwang 发表于 2022-9-7 19:47:29

你可以这样写

const char *letters[] = {
"
########@\
##      @\
##      @\
######@\
##      @\
##      @\
##      @\
",

gandixiwang 发表于 2022-9-7 19:48:22

我做这题的时候发现删掉前面的 ‘\’ 没有影响,而后面的 ‘\’是换行符。

gandixiwang 发表于 2022-9-7 19:58:30

本帖最后由 gandixiwang 于 2022-9-7 20:00 编辑

#include<stdio.h>

const char ch[] =
"\\\###@\
";

int main(void)
{
      printf("%s", ch);
      
      return 0;
}
你这段代码会输出 \###@
是因为最后一个 ‘\’是换行符,就是换到下一行继续写的意思,编译器读完这一行后继续读取下一行,并省略‘\’这个符号
而前面只输出 ‘\’ 是因为为了避免输出不了‘\’这个符号,输入两个‘\’符号就可以让编译器知道你要输出 ‘\’ 这个符号。

两手空空儿 发表于 2022-9-7 20:07:39

gandixiwang 发表于 2022-9-7 19:48
我做这题的时候发现删掉前面的 ‘\’ 没有影响,而后面的 ‘\’是换行符。

第一个“\”不能删,会被认为是序编译指令。
按照小甲鱼能简不繁的风格,这样写肯定是有原因的,借助这个“\”摆出了想要打印的字符形状,很直观。

zhangjinxuan 发表于 2022-9-7 20:11:04

本帖最后由 zhangjinxuan 于 2022-9-7 21:03 编辑

这个叫 《转义》,转义字符有两种作用:
1. 表示特殊、非可见字符,比如 :'\n' 换行    '\0'结束符
2. 将一个字符串分多行显示

方法一讲解:写一个 反斜杠,表示转义开始
常见的转义字符表有这些:
'\a'   终端响铃,如果你在centos7系统中printf("\a"),虚拟机会发出‘滴答’的声音
'\b'退格,将当前位置退回前一列,你可以试试printf("fishd\bc"),看看会发生什么
'\n'   换行,光标移至下一行开头
'\r'   将光标移到本行开头,试试printf("ddfsd \r fishc")
'\0'   结束符,不讲
'\"'   表示一个双引号,试试printf("\\"");
'\\'    表示\,如printf("\\\")
...

当然,如果代码中存在不合法转义,那么这个'\'就会被’吃掉',比如:
'\\\###@"
先遇到\\,变成\,后面遇到\#,但因为'\#'是不合法转义,C会把这个 \"吃掉",所以只有一个'\',后面正常,所以最终结果是 '\###@'

方法二:
这个很简单,如:
"#####\n\
#\n\
#####\n\
#\n\
#\n\
"
每行后面的 \代表 “这个代码(字符串)太长,我想分两行写", 所以,在电脑里,这个字符串长这样:
"#####\n#\n#####\n#\n#\n"
[注:每行前面不能有空格或制表符,不然编译器会把前面的空白符当作字符串的一部分]
当然,也可以连接普通语句,比如
pri\
ntf("Fishc");

两手空空儿 发表于 2022-9-7 20:56:49

zhangjinxuan 发表于 2022-9-7 20:11
这个叫 《转义》,转义字符有两种作用:
1. 表示特殊、非可见字符,比如 :'\n' 换行    '\0'结束符
2....

原来是这样,以前只知道第一种转义的用法
这下知道了,谢谢~~~~~

zhangjinxuan 发表于 2022-9-7 20:58:05

两手空空儿 发表于 2022-9-7 20:56
原来是这样,以前只知道第一种转义的用法
这下知道了,谢谢~~~~~

又双帮助了一个鱼油

两手空空儿 发表于 2022-9-7 21:02:14

非常感谢~~~~~{:5_109:}
页: [1]
查看完整版本: 关于字符串中的“\”,让我迷惑