问个内存拷贝的问题memcpy****************************************************

god_sun 2009-03-04 03:51:45
一个 string aa= "A";
我要按四个字节的长度的拷贝到另一个内存里去

char test[123]= "";
memcpy(test,aa, 4);


question 1:
那么test里应该是,0x00,0x00,0x00,0x65,对吗?

question 2:
如果 aa = "";
那么内存里是不是 0x00,0x00,0x00,0x00?
是不是就等于 unsigned int bb = 0;
memcpy (test, &bb, 4);
...全文
252 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lb0lblb 2009-03-05
  • 打赏
  • 举报
回复
1、test里面一定不是0x00,0x00,0x00,0x65,因为你的memcpy拷贝的是aa的内容加上aa后面的内存中存储的内容,如果按照你解释的aa是char类型的话,那么aa只有2个字节,aa后面的内容不确定,test里面前2个字节是0x65,0x00,后面2个字节的内容不确定
2、你的aa没指定类型,所以不能确定到底有几个字节,如果是char aa="",那么aa本身只有1个字节,里面存储的是'\0'
  • 打赏
  • 举报
回复
你对string类做memeset处理,结果建议自己运行看看吧.
class A a;
a[0]是什么,楼主,你能告诉我吗?
BeckhamXiao 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 god_sun 的回复:]
可能是我写错了。
应该是 char aa[]== "A";
memcpy(test,aa, 4);
test 应该是 0x41,0x00,0x00,0x00


其实我更想知道的是问题2

[/Quote]

这两个问题的回答都是对。初始化就是0x00,0x00,0x00,0x00,C语言能够保证这一点
yangch_nhcmo 2009-03-04
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int main()
{
string aa = "";
char test[123] = "";
memcpy(test,aa.c_str(),4);
printf("-------string aa = \"\" -------\n");
for (int i = 0; i < 4 ; i ++)
printf("test[%d] : 0x%d\n",i,test[i]);


unsigned int bb = 0;
char test1[123] = "";
memcpy(test1,&bb,4);

printf("-----unsigned int bb = 0-----\n");
for (int i = 0; i < 4 ; i ++)
printf("test1[%d] : 0x%d\n",i,test1[i]);

return 0;
}



[Cheney@Fedora 0903]$ g++ -g -o test_1 test_1.cpp
[Cheney@Fedora 0903]$ ./test_1
-------string aa = "" -------
test[0] : 0x0
test[1] : 0x0
test[2] : 0x0
test[3] : 0x0
-----unsigned int bb = 0-----
test1[0] : 0x0
test1[1] : 0x0
test1[2] : 0x0
test1[3] : 0x0
yangch_nhcmo 2009-03-04
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int main()
{
string aa = "A";

char test[123] = "";
memcpy(test,aa.c_str(),4);

for (int i = 0; i < 4 ; i ++)
printf("test[%d] : 0x%d\n",i,test[i]);

return 0;
}



[Cheney@Fedora 0903]$ g++ -g -o test test.cpp
[Cheney@Fedora 0903]$ ./test
test[0] : 0x65
test[1] : 0x0
test[2] : 0x0
test[3] : 0x0
traceless 2009-03-04
  • 打赏
  • 举报
回复
是的,看代码,输出结果
int main(void)
{
char *str = "A";
char test[4]= "";
printf("%#x,%#x,%#x,%#x\n",test[0],test[1],test[2],test[3]);
memcpy(test,str,4);
printf("%c,%#x,%#x,%#x\n",test[0],test[1],test[2],test[3]);
return 0;
}
piginthetree 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 god_sun 的帖子:]
一个 string aa= "A";
我要按四个字节的长度的拷贝到另一个内存里去

char test[123]= "";
memcpy(test,aa, 4);

question 2:
如果 aa = "";
那么内存里是不是 0x00,0x00,0x00,0x00?
是不是就等于 unsigned int bb = 0;
memcpy (test, &bb, 4);
[/Quote]
楼主为什么不自己写代码测试一下呢?
如果char aa[]= ""的话, aa就只占1个字节的内存, 里面的数据是0x00, memcpy(test, aa, 4)的话, 会把aa和aa后面3个字节的数据都拷贝到test里面, 这样test[0]=0x00, test[2~3]的值都是未定义的哦, 谁也不知道会得到什么, 跟memcpy(test, &bb, 4)的结果就算相同也是巧合.
god_sun 2009-03-04
  • 打赏
  • 举报
回复
可能是我写错了。
应该是 char aa[]== "A";
memcpy(test,aa, 4);
test 应该是 0x41,0x00,0x00,0x00


其实我更想知道的是问题2
arong1234 2009-03-04
  • 打赏
  • 举报
回复
test的类型是char[],因此没有高字节在后的问题,所以0x00 0x00 0x00 0x65即使在aa指向"A"
时也不对

况且,aa的地址不指向"A",而是string类内部某个数据结构(依赖编译器也依赖string自己定义)
可以当作规则:用字节拷贝来对付一个类对象永远是不对的

[Quote=引用楼主 god_sun 的帖子:]
一个 string aa= "A";
我要按四个字节的长度的拷贝到另一个内存里去

char test[123]= "";
memcpy(test,aa, 4);


question 1:
那么test里应该是,0x00,0x00,0x00,0x65,对吗?

question 2:
如果 aa = "";
那么内存里是不是 0x00,0x00,0x00,0x00?
是不是就等于 unsigned int bb = 0;
memcpy (test, &bb, 4);
[/Quote]
OenAuth.Net 2009-03-04
  • 打赏
  • 举报
回复
question 1:
那么test里应该是,0x00,0x00,0x00,0x65,对吗?

如果是Intel的话,那就错啦,因为Intel的高字节在后面,低的在前面

question 2:
如果 aa = "";
那么内存里是不是 0x00,0x00,0x00,0x00?




是不是就等于 unsigned int bb = 0;
memcpy (test, &bb, 4);

应该是这样
xiaoyuer5222 2009-03-04
  • 打赏
  • 举报
回复
是不是就等于 unsigned int bb = 0;
memcpy (test, &bb, 4);

这是不行的,第二个参数是字符串,是要以 字符串结束符 结束的
OenAuth.Net 2009-03-04
  • 打赏
  • 举报
回复
直接把你的代码放VC里,看一下memory不就知道了。
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧