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