C++ struct 函数传值的问题

今天碰到个问题。。。struct的值怎么都没办法从函数里面拿出来。
结构定义:
stuct password_digest
{
char* a;
char* b;
char* c;
}

函数是:
password_digest get_password_digest(struct password_digest & pdi)
{
password_digest pd_return;
......
char * temp = ".........................";
pd_return.a = temp;
memcpy(&pdi, &pd_return, sizeof(password_digest));
return temp;
}

我的目的是把函数里面生产的char* temp给传出来、用个结构装着其中内容,把结构传出来。。。

调用情况是:
password_digest pdi1, pdi2;
pdi2 = get_password_digest(&pd1);

结果是:pd1和pd2中的a的地址和函数里的pd_return.a的地址是一样的。。。
在pdi2 = get_password_digest(&pd1)这行调试,值是传出来了,再执行两行。。。里面的数据全没了。。。
现在该怎么处理这样的问题。。。
上面用memcpy就是为了能将结构体的内容全部复制一遍重新分配内存。。。怎么还是这样

第1个回答  2014-01-30
这个函数名字看起来高大上很规范,但是你看起来像初学者。。。password_digest 这个结构体包含了三个成员变量,都是指针,而不是数组,所以你可以给指针赋值地址,但是不能像数组一样给他赋值数据。返回temp的时候是一个临时变量,当函数声明周期结束自然这块栈内存内容就被覆盖了。正确的做法是password_digest 成员改成数组,或者动态malloc()一块内存,数据放在堆上自己可以控制声明周期就不会被后面执行的代码覆盖了。所以说,你的memcpy只是复制地址没有复制内容,数据还是在临时变量那里,结果自然就没效果啦。追问

哎尴尬啊。。。后来改求组了。。。其实目的就是java里的string一样的效果。。。但是cpp实在是没接触过。。。谢谢

c++ 里面struct可以new么?还是可以直接一起赋值?在类里面如何赋值?_百度...
错误的原因是 position只是一个指向float类型常量的指针,所以只能用指针初始化 c++ 里面struct可以new,另外:C++中,struct关键字与Class关键字基本是一样的,但是,有两点不同 1 struct定义的数据类型里面所有成员默认级别都是共有的,而class里面所有成员默认级别都是私有的 2 在模板定义中,只能用...

C+++给一个类的构造函数传一个数组,怎么弄?
include<iostream> include<string> using namespace std;struct stu{ char name[10];int math;};class student{ public:student(stu stu[]){ for(int i=0;i<10;i++)num[i]=stu[i];} void display(){ for(int i=0;i<5;i++){ cout<<num[i].name<<" : "<<num[i].math<<en...

C++里的struct和class的区别到底是什么?我在网上查到的是:除了他们的默...
在C里面:struct不能包含函数,而class可以。在C++里面:都可以有函数,默认情况下struct中变量是public,而class中是private 有一点不明白,class支持的继承和多态,struct也支持??class在赋值运算符右边出现需要有定义的拷贝构造函数,而struct是默认的位拷贝.但是一般从兼容C的角度考虑,struct里面只包含数据成...

C++:Struct XXX a = b是复制内容吗?
直接等号赋值,只是浅拷贝。也就是不同的指针指向同一个内存区域,这样是比较危险的,应为程序有自己的析构函数,会自动释放自己开辟的空间,导致另一个指针无所指的情况。这是无关乎指针的问题的。可以重载=操作符,如struct *p=new struct XXX;p->………就可以了,这样就是自己开辟了一个内存空间...

c语言strcpy将一个结构体的数据复制到另一个后,出问题了
其实我们在结构体中也可以变相的实现定义函数的嘛,比如定义一个函数指针变量。唯一不同的就是C++的类多了继承的概念,一个类可以继承另一个类的一些属性 而且在继承的过程中还有private,public,protected等权限。当然C++除了类之外还有STL等一些比较高级的东东值得学习,巧妙的使用他们可以加快项目进度,...

C\/C++编程笔记:C语言结构体想要直接赋值,应该如何实现?
对比着上面的定义来看C语言数组,数组作为一个函数的参数传递时,退化成一个指针;同时,数组无法作为函数的返回值;也许让数组更不服气的是,数组之间不能直接赋值操作,如下面的操作就是非法的:int a[10];int b[10];a = b;但是如果数组包装在结构体中,那么就能进行赋值了!相比之下,结构体...

struct的问题
'+' : illegal for struct 是说a[i]是一个结构体,他不能和一个双精度整型相加.说清楚一点是结构体类型不能和整型进行加法运算.再通俗一点,一张纸不能和一本书相加减,因为他们单位不一样.'.ave' : left operand points to 'struct', use '->'是说a是一个指针,你应改这么用 a->ave ...

c++里面,传入一个结构体指针,如何将该指针指向的结构体赋值给另一个结 ...
如果有定义,只是不想要一个个赋值来就简单多了。PLD的struct应该有默认的构造函数,你试一下 Message ms1(*ms);或者 Message ms1 = *ms;默认情况下是浅复制,纯值问题不大,但里面有指针时候情况就很复杂了,需要避免对ms1的操作影响ms指针指向的内容,编译器碰到这种情况一般也会waring。

C++ cout的问题
这涉及到两个问题:1,函数参数传递的顺序:传入函数的参数是由右至左,第一组和第二组的输出:22 32 22 32 2 + +运算符:一个功能的同时,我和我+ +等,属于C标准定义特定的编译器相关的内容。函数参数传递的顺序,你的结果只是理解。但是我运行在VC + +,结果如下:22 32 操作没有定义的...

c++ 结构体struct中的数组 初始化?
数组不能通过数组名进行等号赋值;赋值需要一个一个元素进行,因为数组名是一个const指针,不能更改。

相似回答