关于给结构赋值的菜鸟问题(100分)

F

flai

Unregistered / Unconfirmed
GUEST, unregistred user!
#include "stdio.h"
#include "tchar.h"
#include "time.h"
#include "stdlib.h"
void main()
{

struct st_test
{
char a[4];
char b[5];
} test;
char str[1024];
strcpy(str,"102412345");
memmove(&test,str,strlen(str));
printf("len=%d,test.a=%s/n",strlen(test.a),test.a);
printf("len=%d,test.b=%s/n",strlen(test.b),test.b);
getchar();
}
这样写,不能得到正确结果,错在哪?如何写才对?谢谢!
 
该用面向对象了吧。这套老了。不过关注,帮你UP以下
 
strcpy(str,"102412345");
memmove(&test,str,strlen(str));
应改为
memmov(str,"102/01234/0", 9);
memmove(&test,str,9);
否则结果不对,因为c的字符串最后一个字符必须是 /0,否则就不是字符串,而只是字符数组
不能直接显示或者strlen
-----
http://www.8421.org
 
我是原始提问者
==========================
本意是想实现如下功能:
传入结构为4位交易码+1024位的交易内容,而输出结果是4位返回码+1024位返回内容。因此我定义这样的结构:
struct InOut{
char code[4];
char content[1024];
}
因此我就想写这样两个函数:
StrToStruct(struct InOut* stIO,const char* str);
StructToStr(char* str,cosnt struct InOut* stIO);
当然这是一个只有两个成员的结构,也可以通过strncpy来实现,可是,
还有些结构是比较复杂的,因此如何实现这个一个通用函数?这才是我最想要的。
================
100分等着你哦........
 
首先,如果你要把结构成员当作字符串处理,那拷贝入的字符串中就必须包含/0字符,并且
字符个数匹配,比如上面的例子,拷入的字符串中前4四个字符必须是一个字符串,并且长度必须是
0 - 3,有一字节0, 如果字符串长度不是3,那0后面的字符任意。
也就是说,为了能达到你的要求,你的拷入字符串必须是一个完整的结构内容,这样不管
结构怎么定义,都可以用这个调用来实现:
memmov(&test, str, sizeof(st_test));
我最早做程序的时候就是用结构来保存配置和作为数据库保存系统数据,都是一个
fread和fwrite来实现结构和磁盘文件交换数据。我的很久以前写的程序,在
http://www.8421.org/downloads.php都有
 
如果没有指针的话可以直接赋值啊,默认的操作就是"完全拷贝"
用C++的话可以对"="重载
 
改一下结构声明,最好在函数中检查一下参数是否符合要求:
#include "stdio.h"
#include "tchar.h"
#include "time.h"
#include "stdlib.h"
struct InOut{
char code[5];
char content[1025];
};
StrToStruct(struct InOut* stIO,const char* str);
StructToStr(char* str,const struct InOut* stIO);
////////////////////////////////////////////////
int main(int argc, char* argv[])
{
char c[1029]="12341234567890";
InOut s;
StrToStruct(&s,c);
printf("len=%d,s.code=%s/n",strlen(s.code),s.code);
printf("len=%d,s.content=%s/n",strlen(s.content),s.content);
strcpy(s.code ,"4321");
strcpy(s.content,"ABCDE中文FGHIJ12");
StructToStr(c,&s);
printf("len=%d,c=%s/n",strlen(c),c);
return 0;
}
////////////函数实现//////////////
StrToStruct(struct InOut* stIO,const char* str)
{
memmove(stIO->code,str,4);
memmove(stIO->content,str+4,strlen(str)-4);
stIO->code[4]=0;
stIO->content[strlen(str)-4]=0;
}
StructToStr(char* str,const struct InOut* stIO)
{
memmove(str,stIO->code,4);
memmove(str+4,stIO->content,strlen(stIO->content));
}
 
居然会想到写这么个函数 StrToStruct StructToStr
看来是从 Delphi 阵营里跑过来的。
 
顶部