本文介绍了的rpcgen传递一个字符串内部结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图传递一个字符串作为在使用的rpcgen包的网络结构的一部分。这是我的IDL code:
结构参数
{
字符*名称;
INT voterid;
};节目VOTECLIENT_PROG
{
版本VOTECLIENT_VERS
{
串补零()= 1;
串ADDVOTER(INT)= 2;
字符串VOTEFOR(参数)= 3;
串LISTCANDIDATES()= 4;
INT VOTECOUNT(字符串)= 5;
} = 1;
} = 0x2345111;
不知何故,该字符串被截断在服务器的单个字符。例如,如果我通过NAME =ABC,我得到A的服务器。看起来这是因为存根内部的一些问题发生,但我似乎无法找出其中的错误是。
我的客户code表示将字符串作为参数功能:
无效
voteclient_prog_1(字符*主机,字符* C中,int id)的
{
CLIENT * CLNT;
字符* * result_3;
参数votefor_1_arg;DEBUG的#ifndef
CLNT = clnt_create(主机,VOTECLIENT_PROG,VOTECLIENT_VERS,UDP);
如果(CLNT == NULL){
clnt_pcreateerror(主机);
出口(1);
}
#ENDIF / * * DEBUG /
votefor_1_arg.name = C;
votefor_1_arg.voterid = ID; result_3 = votefor_1(安培; votefor_1_arg,CLNT);
如果(result_3 ==(字符**)NULL){
clnt_perror(CLNT,调用失败);
}
clnt_perror(CLNT,调用失败);
DEBUG的#ifndef
clnt_destroy(CLNT);
#ENDIF / * * DEBUG /
}
INT
主(INT ARGC,CHAR *的argv [])
{
字符*主机;
INT ID;
字符* C =新的char [20]; 如果(argc个4;){
输出(用法:%s的SERVER_HOST名voterid \\ n,argv的[0]);
出口(1);
}
主机=的argv [1];
C =的argv [2];
ID =与atoi(argv的[3]);
voteclient_prog_1(主机,C,身份证);
出口(0);
}
任何帮助将大大AP preciated。
解决方案
从的,6.9。特殊情况:
So, you should declare name
like above, e. g. string name<20>;
.
这篇关于的rpcgen传递一个字符串内部结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!