首页 > 解决方案 > 如何在 CAPL 中将字符串作为用户定义的函数参数传递

问题描述

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

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

除了明显的变通方法(例如使用全局变量、使用系统/环境变量)之外,我对其他替代方案的可能性感兴趣。

你怎么做呢?


编辑

CAPL 不提供字符串类型,就像 C 一样,这些只是“只是”字符数组。

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

什么,正确地,先生。Spiller 指出,这段代码有效:

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

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

和输出:

CAPL / .NET 我的字符串是一个字符串

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

例如,这也可以编译:

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);
}

错误:参数类型不匹配。

最后:

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 我的号码是 3(1.000000)

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

标签: capl

解决方案


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

和上述数据类型的矩阵(我不记得确切的措辞并且现在无法访问 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

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


推荐阅读