本文介绍了的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传递一个字符串内部结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 09:02