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/