c和struct中的数组

use*_*376 0 c

我不明白为什么这个程序打印" klmnop "而不仅仅是" klm ".b是一个大小为2的数组!这是代码:

struct S
{
  int i1;
  int i2;
  char b[2];
};

int main()
{
  char a[] = "abcdefghijklmnop";

  struct S* s = a + 2;
  printf("[%s]\n" , s->b);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ala*_*rry 5

像大多数字符串函数一样,你的printf没有关于包含字符串的数组大小的任何信息.它只有一个指向单个char的指针,并且你保证这个char是一系列字符中的第一个被终止'\0'.当被要求打印整个字符串时,它会继续运行,直到找到终止符或崩溃为止,以先到者为准.