早期有 这样的编译:
??) -> ]
??( -> [
所以如果代码:
printf("(are you ok??)");
会输出为: (are you ok]
如何避免:
printf("(are you ok\?\?)");
这样就一定会输出 (are you ok??)
这里面存在一个转义字符 \?
即是在输出多?时,防止被解析成三字母词
printf("%s", "\'\'\"(are you ok\?\?)\"\'\'\n");
printf("c:\\test\\test.c\n");
printf("%d\n",'\111'); // 64+8+1 = 73;
printf("%d\n",'\x11'); // 17
return 0;
输出:
int main() {
char c1 = '\012'; // 10 '\n'
char c2 = '\0123'; // '3'
char c3 = '\0a12'; // '2'
// 大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字
printf("%d\n",'\n');
printf("%d\n",'3');
printf("%d\n",'2');
printf("%d,%d,%d\n",c1,c2,c3);
printf("%c,%c,%c\n",c1,c2,c3);
return 0;
}
运行结果:
所以\ddd 最大是 \377
printf("%d\n", strlen("c:\test\628\test.c"));
\628 out of range, 所以只有\62
结果:14