C++ 将结构传递给函数 这项工作:
我想做的是在函数内部做这些事情 但是我如何将结构传递给函数呢 如果我通过了这样的考试,阅读不起作用:C++ 将结构传递给函数 这项工作:,c++,c,struct,binary,C++,C,Struct,Binary,我想做的是在函数内部做这些事情 但是我如何将结构传递给函数呢 如果我通过了这样的考试,阅读不起作用: void newFunction ( struct client *clients_t) { ... file.read( (char*)&clients_t, sizeof (clients_t) ); } 为什么不在函数中创建一个struct对象呢。 这样也行。 然后,您可以使用创建的对象访问该函数中的结构成员。删除文件.read()中的&调用 因此: 您正在传递指
void newFunction ( struct client *clients_t) {
...
file.read( (char*)&clients_t, sizeof (clients_t) );
}
为什么不在函数中创建一个struct对象呢。 这样也行。
然后,您可以使用创建的对象访问该函数中的结构成员。删除
文件.read()中的&
调用
因此:
您正在传递指针本身的地址,但需要的是结构数组的地址,并传递其正确大小
然而,尽管这使得读取
在技术上是有效的,但它不会为您创建字符串
对象,因此该片段仅在异常情况下有效,即您在该进程的生命周期中较早地写出了对自己对象的引用
作为一种学习体验,读写二进制数据是一个好主意
然而,IRL通常你根本不想做,除非是通过DBMS。它很难调试,并且可以通过公开字节顺序而特定于体系结构。请考虑YAML、XML或CSV。&clients\u t
是指向指针的指针。
clients\t
是一个指针,它是必需的
void newFunction ( struct client *clients_t) {
...
file.read( (char*)clients_t, sizeof (clients_t) );
}
结构只是一个对象,所以您可以像对待其他对象一样对待它
void Foo(client& ClientObj)
{
//anything written in here directly effects the client object you passed
}
请注意,您需要通过引用传递,否则只传递对象的副本
//in main
client CObj;
Foo(CObj);
这是行不通的,因为字符串
数据未嵌入结构
。相反,它有两个指向字符串内容的指针。这就是为什么file.read((char*)&clients…)不会产生有效结果的原因:字符串将指向保存的字符串一旦指向的位置,但它将不再表示感兴趣的数据
如果你想像那样序列化数据,在结构中嵌入一个完整的char
数组,明显的限制是字符数和一些浪费的空间。只需将参数更改为struct client&clients\u t你能提供file.read的签名吗“string”是什么你用什么?是std::string吗?顺便说一句,您真的不应该简单地将结构转储到文件中。您应该为结构构造序列化和反序列化方法。以受控的方式显式地在char
数组之间进行转换实际上,您甚至不应该使用名称空间std代码>。你应该把那5个额外的字符打出来<代码>std::
没有那么长,它使您的代码更加清晰,而且当您碰巧使用了出现在std
中的函数名时,您不必排除非常奇怪的随机编译时或运行时错误。我想我应该删除该符号,但我认为我不需要在sizeof后面加星号我必须尽快提高我的指针知识。终于有人说了。好吧,那我就检查一下你的P
void Foo(client& ClientObj)
{
//anything written in here directly effects the client object you passed
}
//in main
client CObj;
Foo(CObj);