RPC规范中结构内的二维数组定义不起作用

Posted

技术标签:

【中文标题】RPC规范中结构内的二维数组定义不起作用【英文标题】:Definition of 2D array inside struct in RPC Specification not working 【发布时间】:2019-03-21 14:24:49 【问题描述】:

我正在尝试使用 RPC 实现 NFS。现在我的规范文件看起来像这样:(这是它的一个非常基本的版本:))

struct input

    char command[20]; 
    char arg[10][10];   
    int numargs;
;

struct lsresult

    char arr[50][256];
;

program NFSPROG

    version NFSVERSION
    
        lsresult ls(input) = 1;
        int cd(input) = 2;
        int mkdir(input) = 3;
        int mkfile(input) = 4;
     = 1;
 = 0x21111111;

当我尝试使用 rpcgen 编译此 Spec.x 时,我收到如下错误:

 char arg[10][10];
^^^^^^^^^^^^^^
Spec.x, line 4: expected ';'

这可能是什么原因?我不能在 RPC 规范中声明一个 2D 数组吗? (当我尝试以这种方式声明变量时出现同样的错误:结构中的int a,b,c!)

【问题讨论】:

但是我之前什么都没写过…… 仅在二维数组中特别显示错误...当我将其更改为一维时,错误不会出现! @PaulOgilvie...您的 rpcgen 命令是否没有显示此代码的错误? The RPC language 与 C相似,但它不是 C。除此之外,它确实似乎没有直接支持一维以上的数组。我自己对这门语言并不精通,所以有足够的信心写一个答案,但看起来你有一些可能的选择。 阅读 rpcgen 语言规范,它似乎不支持多维数组。见docs.oracle.com/cd/E19683-01/816-1435/6m7rrfn9k/index.html 【参考方案1】:

在 rpcgen 的终端中,您需要一个字符串数组,而不是二维字符数组。首先,你必须 typedef 一个参数类型

typedef string arg<10>;

然后将这些参数组成一个数组:

struct input

    string command<20>;
    arg args[10];
    int numargs;
;

lsresult 类似:

typedef string filename<50>;

struct lsresult

    filename arr[256];
;

应该可以的

【讨论】:

以上是关于RPC规范中结构内的二维数组定义不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中具有二维数组的函数

如何在 C 中返回二维数组?

python如何定义二维结构体数组?

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

php 一个二维数组求二维数组内的并集

多维动态数组,为啥不起作用?