如何在 CAPL 中将字符串作为用户定义的函数参数传递

How can I pass a string as user-defined function parameter in CAPL

根据文档,在 CAPL 中,显然您不能将字符串作为输入参数传递给用户定义的函数(请参阅 CAPL 简介 » 函数参数的数据类型) .

我正在处理文件处理,包括读取和写入方向。我想重构我的代码以使用接受文件名作为输入参数的函数。

除了明显的解决方法,例如使用全局变量,使用 system/environment 变量,我对其他替代方案的可能性很感兴趣。

你是怎么做到的?


编辑

CAPL 不提供 string 类型,很像 C 这些是 "just" 字符数组。

在我提到的帮助页面中,您可以传递单个 char 作为参数函数,但不能传递 char[] 数组.

什么,理所当然,先生。 Spiller 指出这段代码有效:

on start
{
    function("a string");
}

void function(char string[])
{
    write ("my string is %s", string);
}

并输出:

CAPL / .NET my string is a string

但是,对我来说这看起来像一个关联数组。

例如,这也可以编译:

void function(int number[], char string[])
{
    // do stuff
}

但是理解正在发生的事情突然变得更加困难,因为这不会编译:

on start
{
    function(13, "a string");
}

void function(int number[], char string[])
{
    write ("my number is %d", number);
    write ("my string is %s", string);
}

Error: types of parameters do not match.

最后:

variables
{
    int associativeArray[ float ];
}

on start
{
    associativeArray[1] = 3;
    function(associativeArray, "a string");
}

void function(int number[float], char string[])
{
    for (float aKey: number)
    {
        write ("my number is %d(%f)", number[aKey], aKey);
    }
}

CAPL / .NET my number is 3(1.000000)

按预期工作,但话又说回来,我不确定在这种情况下使用关联数组的注意事项是什么(我找不到使用相同语法迭代字符串的方法,因为例如),如果你这样做,你会如何解决这些问题。

您提到的帮助页面还在下面进一步说明

和上述数据类型的矩阵(我不记得确切的措辞,现在无法访问 CANoe)。

char[]int[]等不是关联数组而是数组。 你可能认为它们是关联数组,但键可能只是一个正整数。

如您所说,CAPL 和 C 以相同的方式处理字符串,即作为字符数组。 因此,使用

之类的定义回到您原来的问题
void func(char param[])

当您想将字符串(只是一个字符数组)传递给函数时,这是一种方法。


这个:

on start
{
    function(13, "a string");
}

void function(int number[], char string[])
{
    write ("my number is %d", number);
    write ("my string is %s", string);
}

不编译,因为 13 不是一个整数数组,而只是一个整数。因此编译器说 类型不匹配 .

这会起作用:

on start
{
  int i[1];
  i[0] = 13;
  function(i, "a string");
}

以下代码也不会编译:

void function(char string[])
{
   ...
}

on start
{
  function('a');
}

'a'(注意单引号)只是一个字符,没有字符数组,因此签名不匹配。


您可以通过简单地使用 [] 运算符(也与在 C 中相同)来获取字符串的各个字符。

char s[] = "abcde"; char c = s[2];

会将'c'存入s

希望能解释清楚。随时要求进一步澄清。 (我确实从脑海中输入了所有这些,所以请原谅任何小的语法错误)