标签:style blog http color io 使用 ar for 2014
同类型结构体之间赋值不一定有效
今天为这个问题debug好久...
之前看到一个关于结构体使用的技巧, 这个技巧能够避免内存零碎. 保证结构体所属内存尽量不要零散化.
struct struct_name
{
element_type varible;
...;
element_type pointer[0];
}
关于该用法的介绍.
http://blog.csdn.net/cinmyheart/article/details/28985843
对于普通的结构体,
struct num { int x; int y; };
但是!
上面介绍的那种特殊用法不行.
#include <stdio.h> #include <stdlib.h> int main() { struct node { int a; char string[0]; }; struct num { int x; int y; }; struct num m = {1,3}; struct num n = {2,4}; /* ** ATTENTION! m = n; */ m = n; printf("m.x:%d m.y:%d n.x:%d n.y:%d\n",m.x,m.y,n.x,n.y); struct node* p_string_1 = (struct node*)malloc(sizeof(100)+sizeof(int)); struct node* p_string_2 = (struct node*)malloc(sizeof(100)+sizeof(int)); char hello[] = {"Hello world\n"}; char panic[] = {"Don't panic\n"}; int tmp = 0; for(tmp = 0;tmp < sizeof(hello)/sizeof(hello[0]); tmp++) { p_string_1->string[tmp] = hello[tmp]; } for(tmp = 0;tmp < sizeof(panic)/sizeof(panic[0]); tmp++) { p_string_2->string[tmp] = panic[tmp]; } printf("1:%s2:%s\n",p_string_1->string,p_string_2->string); /* ** ATTENTION! HERE IS AN EVEIL! */ *p_string_1 = *p_string_2; printf("1:%s2:%s\n",p_string_1->string,p_string_2->string); free(p_string_1); free(p_string_2); return 0; }
猜猜看,打印的结果是什么?
标签:style blog http color io 使用 ar for 2014
原文地址:http://blog.csdn.net/cinmyheart/article/details/39350211