新手关于字符串strcat()函数

新手求助关于字符串strcat()函数#include stdio.h#include string.hint main(void){char a[]aaaaaaa

新手求助关于字符串strcat()函数
#include <stdio.h>
#include <string.h>

int main(void)
{
  char a[]="aaaaaaaaaa";
  char b[]="bbbbb";
  
  strcat(a,b);
  printf("%d\n",strlen(a));
  printf("%d\n",sizeof a);
  
  system("PAUSE");
  return 0;
}
请问当我声明两个字符串数组的时候,编译器会自动指定容纳字符串的数组数值吧?
那是不是说声明以后的结果数组变成a[11],b[6]?
书上说strcat函数是把b添加到a的末尾,并且返回a的值,是不是意思说a数组的值在执行完strcat后会改变?照书上说那结果应该变成a[16]吧?也就是a字符串的长度为15,字节数为16?
可我在Dev-c里执行上述语句后结果是strlen(a)为15,sizeof a为11,a的字节数没变但字符串长度却改变了?这咋回事?
还有,如果编译器自动指定容纳字符串的数组数值的话,将b复制到a的末尾难道没有越界吗?还是说编译器会自动协调这一切?
求好心人解惑


[解决办法]
越界了。数组长度没有变。所以你用sizeof获得了正确的数组长度。但是你用strlen的时候却得到了16,原因就是strlen是通过找第一个字符结束符'\0'来判断字符长度的。而strcat也不判断是否越界什么的。它只管往你指定的内存区域后面添加字符而已。所以你其实用了数组a后面的内存,这样是很危险的
[解决办法]
char a[]="aaaaaaaaaa";
char b[]="bbbbb";
这两个定义完后应该就相当于常量字符串,长度已经固定

越界后是可以打印,但是不要去用
定义的时候就应该考虑好数组长度