如何在 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
希望能解释清楚。随时要求进一步澄清。
(我确实从脑海中输入了所有这些,所以请原谅任何小的语法错误)
根据文档,在 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
希望能解释清楚。随时要求进一步澄清。 (我确实从脑海中输入了所有这些,所以请原谅任何小的语法错误)