C语言试题,语法问题

有以下程序:
    char a,b,c,* d;
    a = '\';
    b = '\xbc';
    c = '\0xab';
    d = "\017";
    printf("%c%c%c\n",a,b,c,* d);
编译时出现错误,以下叙述中正确的是()

A.程序中只有a = ' \ ';语句不正确
B.b = ' \xbc ' ;语句不正确
C.d = " \017 " ;语句不正确
D.a = ' \ ' ;c = ' \0xab ' ;语句都不正确

正确答案(D)

我自己运行程序控制台报错也是这两个语句,百度也是这两个语句错误,但不明白原理,请问为什么

a = '' 题目应该是想输出斜杆符号(\),但是在c语言中如果要输出单个斜杆应该要写成: a = '\' ,因为默认一个\是转义字符的标识;所以不正确会报错

b = '\xbc' 这里\x是转义字符表示后面的值以16进制的方式进行输出 16进制bc对应的十进制就是188,正确不会报错

c = '\0xab'; 这里应该写成\xab就不会报错了,\0转义字符表示的是字符结尾,但是单引号只能是单个字符所以不正确,如果是字符数组
char c[] = {"abc\0abc"},这样就正确,后面的abc不会显示输出

d = "\017"; 这对应ASCII码值为15,输出语句是用指针指向这个对应的值,所以表示正确

希望对您有帮助,如果有那么一丢丢帮助帮忙采纳下谢谢!!!

A语法不准确。
C也是错误的,因为有多个字符

\是转义字符,所以给a赋值\的正确写法是 a='\';所以a = ' \ '这个语句是错误的。
\x表示后面的字符是十六进制数,所以B中b = ' \xbc '这个语句是正确的
\0表示后面的字符是八进制数,最多跟3位8进制数字,c = ' \0xab '这个语句中,\0是一个字符,a是一个字符,b是一个字符,所以 ' \0xab '包含了3个字符,但是c是char类型,所以这个语句是错误的。