user-0 提问: 如何写程序将定义的几个变量的值放到一个指针开始的存储空间里去？C语言的

回复:
user: user-0
content: 9楼 zhao4zhong1   大神，这个程序表示看不懂额，可不可以解释一下程序的思路？

user: user-0
content: 说明一点，这是一个笔试题，当时完全没思路，今天看了大家居然有这么多解决方法，真心怀疑自己是不是适合写程序了。。。

user: user-0
content: 非常感谢各位大神指点，最近太忙，没来看帖子，以为会沉掉，没想到会有这么多技术大牛帮我回答，再次感谢各位大神花费宝贵的时间来帮我解决问题！

user: user-1
content: 楼主应该是想要序列化吧，把结构体线性存储，进行传输或存储？ typedef struct tag_param{     char *a;     int b;     float c; } PARAM_S;  char *Linear(PARAM_S *pstParam, int *pLen) { 	int strlen = strlen(pstParam->a); 	int size = strlen + 1 + sizeof(int) + sizeof(float); 	char *pcLine;  	pcLine = malloc(size); 	if (NULL == pcLine) 		return; 	memcpy(pcLine, pstParam->a, strlen + 1); 	memcpy(pcLine + strlen + 1, pstParam->b, sizeof(int); 	memcpy(pcLine + strlen + 1 + sizeof(int), pstParam->c, sizeof(float));  	*pLen = size; 	return pcLine; }   获取的时候，需要strlen(pcLine) 获取A 字符串的长度 。

user: user-2
content: 指定结构体字节对齐： #include <pshpack1.h> typedef struct {     char *a;     int b;     float c; } PARAM_STRUCT; #include <poppack.h>

user: user-3
content: //将char *a = "123";  int b = 123;  float c = 1.23;   三个变量的值依次保存到void *d 开始的存储单元 #include <stdio.h> #include <stdlib.h> #include <string.h> char *a = "123";  int b = 123;  float c = 1.23f; void *d; void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } } int main() {     d=malloc(sizeof(char *)+sizeof(int)+sizeof(float));     if (NULL==d) return 1;     *((char **)d)=a;     *((int *)((char *)d+sizeof(char *)))=b;     *((float *)((char *)d+sizeof(char *)+sizeof(int)))=c;     HexDump((char *)d,sizeof(char *)+sizeof(int)+sizeof(float),(int)d);     free(d);     return 0; } //00421960 - 1c 30 41 00 7b 00 00 00 a4 70 9d 3f              .0A.{....p.? //

user: user-4
content: 用结构体并不能保证内存连续，因为还有内存对齐这个东西

user: user-5
content: char buf[0x100] = {0}; char *a = "123";  int b = 123;  float c = 1.23;   memcpy(buf, a, strlen(a)); memcpy(buf+3, &b, sizeof(b));  //注意, 这里未保存\0. memcpy(buf+3+sizeof(b), &c, sizeof(float));

user: user-6
content: 声明一个适合存放你结构的变量，把你自己的变量塞进一个结构体中，把你自己的变量塞进一个结构体中

user: user-7
content: 使用结构体就行了 struct ss{     char* a;     int b;     float c; };  struct ss s= {"123", 123, 1.23}; void* d = (void *) &s;

user: user-8
content: 弄个结构体不就行了

user: user-9
content: 这些数据类型大小都不一样，你存在void*以后。如果解析的人不知道void*具体的格式，就必然出错。 我觉得不是一个好的编码风格

user: user-10
content: 没有人可以保证，只自己申请一块连续内存，然后自己存放，或者定义一个结构