- 2009-03-07 (土) 23:25
- C言語
typedef struct COPY_STRUCT {
int a;
char b[4];
int c;
} COPY_STRUCT;
int main(int argc, char* argv[]) {
COPY_STRUCT hoge, fuga;
hoge.a = 1;
memcpy(hoge.b, "abc", 4*sizeof(char));
hoge.c = 2;
fuga = hoge;
memcpy(hoge.b, "def", 4*sizeof(char));
printf("%d, %s, %d\n", fuga.a, fuga.b, fuga.c);
return 0;
}
ちゃんと
1, abc, 2
って表示されるんだぜ?
COPY_STRUCT.bがポインタだったらだめだろうけど、サイズの決まった配列なら一気にちゃんとコピーしてくれる。当たり前のことだが、Cって配列とかはめんどくさいイメージがあるから、JavaとかPHPとかそういう高級な言語から戻ってくると警戒しすぎて不思議に思ってしまう。
以上
関連記事
- Newer: VS2008のコード定義ウィンドウの色
- Older: Halo Wars中
Comments:3
- 匿名 09-04-13 (月) 1:02
-
配列のコピーができると言うよりは、
C言語では「構造体のディープコピー」ができるので(K&R時代はできなかった環境もある)
そのメンバも複製されてます。ちなみに、言語仕様上でsizeof(char)は常に1と定義されているので、sizeof(char):1をかける意味はありません。
(C/C++では、sizeof(char):1を基準として他のデータのサイズを表現するため) - コスミー 09-04-13 (月) 21:55
-
>配列のコピーができると言うよりは、
>C言語では「構造体のディープコピー」ができるので(K&R時代はできなかった環境もある)
>そのメンバも複製されてます。
誤解を与えたかもしれませんが、この辺は一応理解しています(つもり)。
K&R時代~ってのは知りませんでしたが(笑)
スクリプトばっかやってると逆に変な気分になるって言う。>ちなみに、言語仕様上でsizeof(char)は常に1と定義されているので、sizeof(char):1をかける意味はありません。
プログラム上は意味はないと思いますが、他の型の場合でも統一的に書くためと、「char型の配列を作ってるんだぜ」っていう意思表示のため、個人的には必要だと思っています。 - 匿名 09-04-15 (水) 0:17
-
失礼しました。m( _ _ )m
Trackbacks:0
- Trackback URL for this entry
- http://red-treasure.com/report/wp-trackback.php?p=345
- Listed below are links to weblogs that reference
- Javaとかスクリプト言語からC言語に戻ってくると警戒しすぎて不思議に思ってしまうこと from コスミー報告書[社外秘]