capl - 如何在 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)
按预期工作,但话又说回来,我不确定在这种情况下使用关联数组的注意事项是什么(例如,我找不到使用相同语法迭代字符串的方法),以及如何如果你这样做,你会解决他们的问题吗?
解决方案
您提到的帮助页面还在下面进一步说明,例如
和上述数据类型的矩阵(我不记得确切的措辞并且现在无法访问 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
希望能解释一下。随时要求进一步澄清。(我确实从头顶输入了所有这些,所以请原谅任何小的语法错误)
推荐阅读
- kubernetes - Docker 桌面上的 Kubernetes 入口
- ruby-on-rails - Rails:从 Rails 触发和调度事件
- python - 执行 INSERT 查询的 asyncpg 语法错误
- r - 如果等于列,则有条件地删除第一个字母字符串
- css - React DataGrid 单行自定义
- python - 如何检查所有行是否重合(sqlite)
- docker - 将 Dockerfile 路径设置为同一目录
- node.js - 如何更改运行 node.js 的文件夹
- neural-network - 在 pytorch 中创建自定义梯度下降
- swift - SwiftUI 通过触摸其边界之外来隐藏视图