应该注意以下问题。

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;
 }
  1. 若'\0'后跟数字,如上,则将‘\012’看做是一个字符。

  2. 若'\0'后跟字母,如上,则将单独‘\0’看做是一个字符。

  3. 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)是小端