未初始化的大小在程序陣列與內部結構體
#include<stdio.h>
struct t {
char a[5];
char b[];
} temp;
int main(){
temp.b[0] = 'c';
temp.b[1] = 'b';
temp.b[2] = '\0';
printf("Size of struct = %lu\n", sizeof(temp));
printf("String is %s\n", temp.b);
printf("Address of temp = %p\n", &temp);
printf("Address of array a = %p\n", &(temp.a));
printf("Address of b = %p\n", &(temp.b));
}
與輸出
Size of struct = 5
String is cb
Address of temp = 0x601035
Address of array a = 0x601035
Address of b = 0x60103a
在這個程序中,究竟是數組b被分配?多久了?這是一些未定義的行爲,只是在虛擬程序中取得成功,因爲我沒有做任何其他事情。運行到gdb中,我可以訪問一些初始化爲零的內存位置,這讓我懷疑它正在分配一些內存。
我的確有一個api,需要我將結構的一個元素格式化爲int a [] [SIZE],我對此感到困惑。
此外,爲什麼sizeof沒有考慮到至少從數組b的東西。我不確定它是否將其作爲數組或指針。
http://stackoverflow.com/a/11734035/669576 –
'b'是一個靈活的陣列成員;在C99中引入。 –
你在這裏有什麼是未定義的行爲。上面提到的開放結構的東西只適用於混雜的東西。你有一個靜態結構。你正在註銷它的結尾 – pm100