c语言字符串问题设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B ) (A) c=*p1+*p2; (B) p2=c; (C) p1=p2; (D) c=*p1*(*p2); D选项错误问题能详细解释下吗
D选项能详细解释下吗
追答D选项表示将p1指向的字符串的首字符和p2指向的字符串的首字符相乘。
追问字符相乘是什么意思
例如A*B
追答两个字符相乘等价于将它们的ASCII码相乘。
追问但是乘出来没有这个acll呢
能够赋值吗
1236
例如像1236
追答乘法结果发生溢出是一个未定义行为,通常发生上溢后会变成下界,例如char型最大值127,再+1后会变成-128。
追问能通俗些吗
追答1236除256余212,212超过了char型上界发生上溢减256得-44,所以char c=1236等价于char c=-44。
追问再问下-44有这个字符吗
追答负数字符表示扩展字符集,需要和它后面的一个字节一起解释成一个ANSI字符。
负数字符表示扩展字符集,需要和它后面的一个字节一起解释成一个ANSI字符。
追问也就是溢出可以转化为另一种形式赋值给他
追答是作为扩展ASCII字符集(ANSI)解释。你可以自己了解一下什么是ANSI编码。GBK/GB2312就是中国本地化的ANSI字符集。