teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

加筆

2016/01/17 00:17

投稿

cateye
cateye

スコア6851

answer CHANGED
@@ -1,4 +1,32 @@
1
1
  ipadcaronも書かれていますが、Cの構造体はソースどおりに配置されません。
2
2
  従って、実際にコンパイルしてデータを確認しないとサイズに対しても分かりません。
3
3
  printf()などでサイズを表示させて見ましょうd^^
4
- また、char str[38]の最初にchar name[20]がおかれるとは限らないと言う事も覚えておいてください。
4
+ また、char str[38]の最初にchar name[20]がおかれるとは限らないと言う事も覚えておいてください。
5
+ [加筆]
6
+ 以下のソースで実験d^^・・・環境とコンパイラはFreeBSD10.2-RELEASE-p8、clang version 3.4.1
7
+ ```C
8
+ #include<stdio.h>
9
+ #include<string.h>
10
+
11
+ typedef union{
12
+ char str[38];
13
+ struct{
14
+ char name[20];
15
+ char age[3];
16
+ char blo[3];
17
+ char height[6];
18
+ char weight[5];
19
+ }jo;
20
+ }Jou;
21
+
22
+ int main(void){
23
+
24
+ Jou j;
25
+ strcpy(j.str,"0123456789012345678901234567890123456");
26
+ printf("%lu %s \n", sizeof j, j.jo.age); return 0;
27
+ }
28
+ ~/test >./a.out
29
+ 38 01234567890123456
30
+ ~/test >
31
+ ```
32
+ ここで見る限りは問題はなさそうですが、コンパイラ依存なので注意してください。