C语言编译和链接错题
一、错题重现
1.用在switch语句中的关键字不包含哪个?( )
A.continue
B.break
C.default
D.case
2.下面代码的结果是:( )
A.3
B.4
C.随机值
D.5
3.下面那个不是转义字符?
A.'\n'
B.'\060'
C.'\q'
D.'\b'
二、错因分析及思考
1.题目看成C语言中的关键字不包括哪一个了(审题不细心导致)
continue不用于switch结构
正确答案:A
2.strlen用于获取字符串有效长度,不包括'\0'在内
strlen会从前往后检测,直到遇到'\0'结束
题目中的arr是一个字符数组,不是一个有效的字符串
破题关键:主要看't'后面的第一个\0在哪里 但是他不知道 所以答案是不确定 即随机值
运行结果:
strlen
恰好读取了 36 个字节后找到了 \0
,因此打印了 36 (这里的36就是一个随机值)
正确答案:C
3.正确答案C
C语言中各个进制的回顾
二进制0b开头
八进制0开头
十六进制0x开头
十进制无特殊前缀
B选项中'\060'转成十进制是48 拓展:0-9ascii值48到57
\n是换行 \b是退格 C语言中没有\q
类别 | 转义字符 | 含义 | 示例代码 |
---|---|---|---|
控制字符 | \n | 换行符 | printf("Hello\nWorld"); |
\t | 水平制表符 | printf("A\tB"); | |
\r | 回车符 | 通常与 \n 配合使用(Windows) | |
\b | 退格符 | 用于删除前一个字符(较少使用) | |
特殊符号 | \\ | 反斜杠 | printf("\\"); |
\' | 单引号 | printf("It's a test\n"); | |
\" | 双引号 | printf("He said: \"Hello\"\n"); | |
不可打印字符 | \a | 响铃(警报声) | printf("\a"); |
\v | 垂直制表符 | 较少使用 | |
进制表示 | \ooo | 八进制表示字符 | printf("\101"); // 输出 'A' |
\xhh | 十六进制表示字符 | printf("\x41"); // 输出 'A' |
C语言中转义字符如上
注意点:“进制表示”是转义字符的一类特殊形式