这个程序能正常运行但被告知存在问题,问这样写法问题具体体现在哪里?~

#include<stdio.h> int main( void ) { float a; *(char**)&a="hello world"; printf("%s\n",*(char**)&a); return 0; }
这个程序能正常输出"hello world",而且我这个编译器也没有任何警告提示,但被人类告知这样写是错误的!就是问问这个错误具体体现在哪里?最好能够详细讲解一下,先谢过了

#include<stdio.h> int main( void ) { int x=1; float a; *(char**)&a="hello world"; int y=2; printf("%s\n",*(char**)&a); printf("x=%d\n",x); printf("y=%d\n",y); return 0; }
#include<stdio.h> #pragma pack(push,1) struct s { int a; char b; struct { int ca; char cb[2]; }*c; }; #pragma pack(pop) void* _alloc( void ); void _fill( void* ); void _read( struct s* ); void _free( void** ); int main( void ) { void* p=_alloc(); _fill(p); _read((struct s*)p); _free(&p); return 0; } #include<stdlib.h> void* _alloc( void ) { void* p=malloc(sizeof (int)+sizeof (char)+sizeof (void*)); *(p+sizeof (int)+sizeof (char))=malloc(sizeof (int)+2*sizeof (char)); printf("Entry=%p\n",p); return p; } void _fill( void* p ) { *(int*)p=1; *(char*)(p+sizeof (int))='2'; **(int**)(p+sizeof (int)+sizeof (char))=3; *((*(char**)(p+sizeof (int)+sizeof (char)))+sizeof (int))='4'; *((*(char**)(p+sizeof (int)+sizeof (char)))+sizeof (int)+sizeof (char))='5'; } void _read( struct s* p ) { printf("p->a=%d\n",p->a); printf("p->b=%c\n",p->b); printf("p->c->ca=%d\n",p->c->ca); printf("p->c->cb[0]=%c\n",p->c->cb[0]); printf("p->c->cb[1]=%c\n",p->c->cb[1]); } void _free( void** p ) { free(*(void**)(*p+sizeof (int)+sizeof (char))); free(*p); *p=NULL; }
[此贴子已经被作者于2018-5-6 14:25编辑过]