根据文档,显然在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
希望能解释一下。随时要求进一步澄清。(我确实是从头开始输入所有内容,因此请原谅所有较小的语法错误)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句