// -std=c99 -Wall -Wextra -Wpedantic -Wshadow #include #include #include #define TEST_STR_MAX 512 struct st { char str1[TEST_STR_MAX]; char str2[TEST_STR_MAX]; char *str3; int iv; double dv; }; int main() { struct st st_arr[100]; char teststr[] = "Test"; st_arr[0] = ( struct st ){ "One", "Two", NULL, 1, 0.1 }; st_arr[1] = ( struct st ){ "Ice", "Cream", NULL, 123, 2.1 }; st_arr[2] = ( struct st ){ 0 }; // with designated initializers st_arr[3] = ( struct st ){ .str1 = "Penguin", .str2 = "Antarctica" }; st_arr[4] = ( struct st ){ .str2 = "Antarctica", .str1 = "Penguin", .dv = 321.1 }; st_arr[5] = ( struct st ){ .str1 = "Again", .iv = 5 }; st_arr[6] = ( struct st ){ .str2 = "String" }; st_arr[7] = ( struct st ){ .str3 = teststr }; st_arr[8] = ( struct st ){ .iv = 32 }; for ( int i = 0; i < 9; ++i ) { printf( "(%d) %s %s %s %d %f\n", i, strlen( st_arr[i].str1 ) ? st_arr[i].str1 : "ZeroLen", strlen( st_arr[i].str2 ) ? st_arr[i].str2 : "ZeroLen", st_arr[i].str3 ? st_arr[i].str3 : "NULL", st_arr[i].iv, st_arr[i].dv ); printf (" *st_arr[%d].str1: %s *st_arr[%d].str2: %s\n", i, *st_arr[i].str1 ? "NonZero" : "Zero", i, *st_arr[i].str2 ? "NonZero" : "Zero" ); printf( " %p %p %p\n", (void*) st_arr[i].str1, (void*) st_arr[i].str2, (void*) st_arr[i].str3 ); } return 0; } /* output: (0) One Two NULL 1 0.100000 *st_arr[0].str1: NonZero *st_arr[0].str2: NonZero 0x7ffca60c7120 0x7ffca60c7320 (nil) (1) Ice Cream NULL 123 2.100000 *st_arr[1].str1: NonZero *st_arr[1].str2: NonZero 0x7ffca60c7538 0x7ffca60c7738 (nil) (2) ZeroLen ZeroLen NULL 0 0.000000 *st_arr[2].str1: Zero *st_arr[2].str2: Zero 0x7ffca60c7950 0x7ffca60c7b50 (nil) (3) Penguin Antarctica NULL 0 0.000000 *st_arr[3].str1: NonZero *st_arr[3].str2: NonZero 0x7ffca60c7d68 0x7ffca60c7f68 (nil) (4) Penguin Antarctica NULL 0 321.100000 *st_arr[4].str1: NonZero *st_arr[4].str2: NonZero 0x7ffca60c8180 0x7ffca60c8380 (nil) (5) Again ZeroLen NULL 5 0.000000 *st_arr[5].str1: NonZero *st_arr[5].str2: Zero 0x7ffca60c8598 0x7ffca60c8798 (nil) (6) ZeroLen String NULL 0 0.000000 *st_arr[6].str1: Zero *st_arr[6].str2: NonZero 0x7ffca60c89b0 0x7ffca60c8bb0 (nil) (7) ZeroLen ZeroLen Test 0 0.000000 *st_arr[7].str1: Zero *st_arr[7].str2: Zero 0x7ffca60c8dc8 0x7ffca60c8fc8 0x7ffca60e0a83 (8) ZeroLen ZeroLen NULL 32 0.000000 *st_arr[8].str1: Zero *st_arr[8].str2: Zero 0x7ffca60c91e0 0x7ffca60c93e0 (nil) */