这段程序为什么输出9呢?谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/29 03:00:55
char s[]="\\141\141abc\t";
??printf ("%d\n",strlen(s));

我实际测试了一下这段代码,程序的返回的确是9。
根据C语言的语法,反斜杠“\”被称为转义字符,当您对char型数组s赋值时,“\”和它后面的字符被解释为另外的意义。
那么现在来看一下这个赋值语句:
赋值号的结合性是从右至左,先计算右边的表达式,然后再将它赋给左边的变量,“\\”的含义是“代表一个反斜杠字符”,而“\ddd”的含义是“1到3位8进制数所代表的字符”,又因为这个表达式的计算方式是自左向右,所以首先“\\”被解释为“\”,即一个反斜杠,然后“141”三个数保持不变,再然后右遇到了“\”,所以后面的141被当作是三位8进制数,“\141”用十进制表示是97,所以它代表a,后面的“abc”不变,“\t”代表水平制表符,因此也被当作一个字符,这样其实数组s接收到的字符串已经变成了"\141aabc\t",当然,程序运行的时候\t也会被代表它的特殊字符代替。这样一来在计算字符串长度的时候,它的长度就只有9了。

我按照您提供的代码在VC里进行了测试,在赋值语句上下断监视,证明表达式[]="\\141\141abc\t"的确在赋值时被转化为了"\141aabc\t"。

希望这些信息可以帮的上您。