首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Char数组内存分配

Char数组内存分配
EN

Stack Overflow用户
提问于 2012-09-05 07:33:16
回答 1查看 887关注 0票数 1

我想知道memcpy()关于内存分配的结果是怎样的。

代码语言:javascript
运行
复制
#include<stdio.h>
#include<string.h>

typedef struct {
  char myname[7] ; 
} transrules;

trans typedef struct {
  char ip ;
  int udp;
  transrules rules[256];
} __attribute__ ((__packed__)) myudp;

myudp __attribute__ ((__packed__)) udpdata ;

char arr[400] ;

int main() {            
  memset (&udpdata , 0 ,sizeof(udpdata));
  udpdata.ip = 'a' ;
  udpdata.udp = 13 ;
  udpdata.rules[0].myname = "lalla\0" ;
  memcpy (&arr , &udpdata, sizeof(udpdata));
  printf("%c",arr[0]);
  return 0;
}

关于代码,我们如何打印出结构transrules中的字符数组?

PS :是的,这段代码抛出了一个错误,见鬼char

既然定义的数组是char类型的,为什么arr1仍然接受带有memcpy()的整数值?

EN

回答 1

Stack Overflow用户

发布于 2012-09-05 08:08:02

关于代码,我们如何打印出结构transrules中的字符数组?

代码语言:javascript
运行
复制
/* incorrect -> udpdata.rules[0].myname = "lalla\0" ; */
strcpy(udpdata.rules[0].myname,"lalla") ;
printf("%s\n",udpdata.rules[0].myname);

既然定义的数组是char类型的,为什么arr 1仍然接受带memcpy的整数值?

memcpy不知道也不关心它要复制到的底层数据类型可能是什么。它接受void指针,并将一个或多个字节中的值复制到一个或多个其他字节:

代码语言:javascript
运行
复制
void * memcpy ( void * destination, const void * source, size_t num );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12272672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档