gpt4 book ai didi

c++ - rpcgen-在结构中传递字符串

转载 作者:行者123 更新时间:2023-11-28 07:00:07 26 4
gpt4 key购买 nike

我正在尝试使用 rpcgen 包将字符串作为结构的一部分通过网络传递。这是我的 IDL 代码:

struct param
{
char* name;
int voterid;
};

program VOTECLIENT_PROG
{
version VOTECLIENT_VERS
{
string ZEROIZE() = 1;
string ADDVOTER(int) = 2;
string VOTEFOR(param) = 3;
string LISTCANDIDATES() = 4;
int VOTECOUNT(string) = 5;
} = 1;
} = 0x2345111;

不知何故,字符串在服务器上被截断为单个字符。例如,如果我传递 name = "abc",我会在服务器上得到 "a"。看起来这是由于 stub 内部的某些问题而发生的,但我似乎无法弄清楚错误在哪里。

将字符串作为参数传递的函数的客户端代码:

void
voteclient_prog_1(char *host, char* c, int id)
{
CLIENT *clnt;
char * *result_3;
param votefor_1_arg;

#ifndef DEBUG
clnt = clnt_create (host, VOTECLIENT_PROG, VOTECLIENT_VERS, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
#endif /* DEBUG */
votefor_1_arg.name = c;
votefor_1_arg.voterid = id;

result_3 = votefor_1(&votefor_1_arg, clnt);
if (result_3 == (char **) NULL) {
clnt_perror (clnt, "call failed");
}
clnt_perror (clnt, "call failed");
#ifndef DEBUG
clnt_destroy (clnt);
#endif /* DEBUG */
}


int
main (int argc, char *argv[])
{
char *host;
int id;
char* c = new char[20];

if (argc < 4) {
printf ("usage: %s server_host name voterid\n", argv[0]);
exit (1);
}
host = argv[1];
c = argv[2];
id = atoi(argv[3]);
voteclient_prog_1 (host, c, id);
exit (0);
}

任何帮助将不胜感激。

最佳答案

来自 rpcgen Programming Guide , 6.9.特殊情况:

Strings: C has no built-in string type, but instead uses thenull-terminated “char *” convention. In XDR language, strings aredeclared using the “string” keyword, and compiled into “char *”s inthe output header file. The maximum size contained in the anglebrackets specifies the maximum number of characters allowed in thestrings (not counting the NULL character). The maximum size may beleft off, indicating a string of arbitrary length.

Examples:

string name<32>;   --> char *name;
string longname<>; --> char *longname;

所以,你应该声明name像上面一样,e。 G。 string name<20>; .

关于c++ - rpcgen-在结构中传递字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com