请问为什么输出是\xb2?
别人给我说0 1是控制字符
但是我还是没懂
多试了几次发现是\0及后面两位无法输出
我看了strcpy这个函数的原理,是从后面那个参数的(字符串)开始覆盖前面
那么后面这个字符串的开头不就应该是\0后的第一位么?
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(void) {
char *a;
a = (char *)malloc(sizeof(char)*20);
if(a) {
strcpy(a,"\0101\\xb2");
printf("%s\n",a);
free(a);
}
return 0;
}
\0101\\xb2
其实是 '\010' + '1' + '\\' + 'xb2'
\010其实就是8进制8,也就是\b,退格
所以这个字符串输出 1\xb2(退格输出不出来)
你需要掌握的知识点是:
\+三个数字 表示八进制的这3个数字的单个字符,比如说A的ascii是65,转换成8进制是101,那么\101不是\0 + 01,而是A
\\表示一个斜杠,因此\\101不是\ + A,而是\ + 101
再说这个strcpy,它如果真的遇到\0,就不拷贝了,而不是把\0后作为字符串开头,C语言字符串开头没有任何标记,结尾才有\0