关于结构体地址的问题
小弟调程序的时候出现了如下问题
就是将一个字符串发送出去,如果照下面写则收到的数据包内容是Hello
- C/C++ code
char *a = "Hello";uip_send(a,5);
其中uip_send()
- C/C++ code
voiduip_send(void *data, int len){ int copylen;#define MIN(a,b) ((a) < (b)? (a): (b)) copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN - (int)((char *)uip_sappdata - (char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN])); if(copylen > 0) { uip_slen = copylen; if(data != uip_sappdata) { memcpy(uip_sappdata, (data), uip_slen); } }}- C/C++ code
#define memcpy(dest, src, count) w_memcpy(dest, src, count)void *w_memcpy(void *out, const void *in, size_t n){ uint8_t *src, *dest; src = (uint8_t *) in; dest = (uint8_t *) out; while(n-- > 0) { *dest++ = *src++; } return out;}但是如果我将字符串写到结构体中,则收到数据包的内容是乱码
- C/C++ code
struct data{ char *a ;}data_raw;struct data *data_p;data_p = &data_raw;data_p->a = "Hello";uip_send((void *)data_p,5);感觉这两种方式差不多了,怎么会出现这种情况呢?请教各位了!
[解决办法]
data_p的a指向哪里?
[解决办法]
char *a 表示char指针指向字符串 ''"hello"地址,但字符串是另一快空间,而结构体里面指针指针表示的是字符串地址的值;memcpy到data_p指向地址就是修改data_p->a 的值;并没有修改data_p->a指向的字符串的值。