应该注意以下问题。
int main(){
char a[] = "abc\012wer";
char b[] = "asd\0basd";
int n,m,n1,m1;
n = sizeof(a);
m = strlen(a);
n1 = sizeof(b);
m1 = strlen(b);
return 0;
}
若'\0'后跟数字,如上,则将‘\012’看做是一个字符。
若'\0'后跟字母,如上,则将单独‘\0’看做是一个字符。
strlen获取字符串长度时,一遇到‘\0’就停止计数。但是‘\0’后跟数字 还是讲‘\012’看做是长度为1的字符。
所以上面结果 n=8,m=7;n1=9;m1=3;
注意:
1.char型数据和int型数据在内存中的数据存储方式相同,都是以二进制的补码的方式存储,所以int和 char型数据可以互相转换。
int main(){
int a=0x11223344;
char c[4];
*((int*)c)=a;
printf("%x%x%x%x",c[0],c[1],c[2],c[3]);
return 0;
}
输出结果:44332211
这里就涉及到了大端小端的问题。
//00010001 00100010 00110011 01000100 整型的四个字节
//c[3] c[2] c[1] c[0] 每个char 一个字节
小端:高地址存储高位数据
大端:低地址存储高位数据
(X86)是小端
转载于:https://blog.51cto.com/10979088/1735978