5

我在 Vector CANoe 中开发 CAPL 脚本,我需要定义几个返回文本字符串的函数。在 C 中,我会这样写:

char * ErrorCodeToMsg(int code)

或者

char [] ErrorCodeToMsg(int code)

在 CAPL 中,两个定义都以parse error. 到目前为止,我想出的唯一可行的解​​决方案是:

variables {
  char retval[256];
}

void ErrorCodeToMsg(int code) {
  char [] msg = "Hello word";
  strncpy(retval, msg, 256);
}

当然这很丑陋,因为每次调用都ErrorCodeToMsg需要两条语句而不是一条。有没有更好的办法?

4

2 回答 2

4

您必须像使用基于字符串的函数一样执行此操作:

 void ErrorCodeToMsg(char buffer[], int code){
 buffer = myListOfCodes[code];
 }

该值将使用其参考值存储在缓冲区中。无法在 Capl 中返回字符串。这就是您不能使用@选择器访问字符串系统变量的原因。

于 2015-06-19T19:59:15.970 回答
0

我已经为返回字符串常量的函数实现了一种解决方法。它包括定义一个可能的返回值数组char errorMsg[][]并定义一个函数,该函数int ErrorCodeToMsg(errno)是该数组中的返回和索引,因此它的调用方式如下:

write("Error: %s", errorMsg[ErrorCodeToMsg(errno)]);

请注意,此方法在手动编码时容易出错,因为修改后很容易使函数和数组不同步。就我而言,错误代码是在规范(XML 文件)中定义的,因此会自动生成错误消息数组和ErrorCodeToMsg函数。

于 2015-06-22T12:59:05.143 回答