c - c中的转义序列

标签 c

int main()
   {       char *arr="\\0\1\8234\0"; int i=0;
           while(arr[i])
           {        switch(arr[i])
                    {
                            case '0': printf("is no"); break;
                            case '00': printf("is debugging\n"); break;
                            case 0: printf("It is Avishkar\n"); break;
                            case '\\': printf("This "); break;
                            case '\1': printf("t s"); break;
                            case '8': printf("o s"); break;
                            case '2': printf("imp"); break;
                            case '3': printf("le as"); break;
                            case 2: case 3: case 4:
                            case 8: printf("This "); break;
                            default: printf(" it seems\n"); break;}
                    i++; } }

请解释一下 o/p ? 我无法得到它..

最佳答案

分解我们的字符串初始化:

\\ == literal \ character
\1 == octal representation of integer "1"
\8 == technically invalid standard C, microsoft compilers will treat an
unsupported (i.e. non-octal, non-escape, non-hex-specifier) character after
a slash as if the slash were not present, so this is ascii '8'
2 == ascii '2'
3 == ascii '3'
4 == ascii '4'
\0 == literal zero
arr[ 0 ] = '\\';   // literal backslash
arr[ 1 ] = '0';    // ascii '0'
arr[ 2 ] = 1;      // integer 1
arr[ 3 ] = '8';      // using microsoft (non-portable) syntax
arr[ 4 ] = '2';     // ascii '2'
arr[ 5 ] = '3';     // ascii '3'
arr[ 6 ] = '4';     // ascii '4'
arr[ 7 ] = 0;       // integer 0

循环打印 i 的每个连续值:

i == 0: "This "
i == 1: "is no"
i == 2: "t s"
i == 3: "o s"
i == 4: "imp"
i == 5: "le as"
i == 6: "it seems"

从字面上看:

这并不像看起来那么简单

尾随的\0 是导致 while( arr[ i ] ) 失败并且循环在 i == 7 时停止。

尽管这可能会导致编译器在非 Microsoft 编译器上报错。

关于c - c中的转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704440/

相关文章:

c++ - 为什么在条件运算符 (?:), 第二和第三个操作数必须具有相同的类型?

c - 如何将数据从一个结构指针复制到另一个结构成员

c++ Allegro 5 - 内存泄漏(valgrind)

c - fatal error : thread. h:没有那个文件或目录

c - 为什么 C 数组的 5[a] 不会超出范围?

c - C LINUX中串口读取不一致

c - 带 OpenGL 的嵌套剪刀盒

c - 作者插入不需要的换行符

c - 段错误、总线错误、中止

关闭 C 程序前的确认