解决错误:字符串不支持 coder.varsize
问题
代码生成不支持使用 coder.varsize
(MATLAB Coder) 指令将字符串变量定义为可变大小。如果您对字符串变量调用 coder.varize
,代码生成期间会出现以下错误:
coder.varsize() is not supported for variables of string type.(字符串类型的变量不支持 coder.varsize()。)
可能的解决方案
请考虑以下 MATLAB® 函数,它返回字符串。此函数的代码生成失败,因为代码生成器将 s
定义为长度为 0
的固定大小字符串,并且无法在 for
循环内增大字符串的大小。您无法使用 coder.varsize
将 s
定义为可变大小,因为 s
是字符串。
function out = varSizeStringError(n) s = ""; for i = 1:n s = s + ":) "; end out = s; end
避免使用字符串
如果您的应用程序不要求使用字符串,您可以使用可变大小字符行向量来代替字符串。例如:
function out = varSizeStringExample1(n) s = ''; coder.varsize('s'); for i = 1:n s = append(s,':) '); end out = s; end
将可变大小字符向量转换为字符串
由于代码生成支持使用 coder.varsize
指令定义可变大小的字符数组,因此您可以定义可变长度字符行向量,然后将该向量转换为字符串。例如:
function out = varSizeStringExample2(n) chars = ''; coder.varsize("chars"); s = convertCharsToStrings(chars); for i = 1:n s = s + ":) "; end out = s; end
使用 string(blanks(coder.ignoreConst(0)))
构造空的可变长度字符串
您可以使用 string(blanks(coder.ignoreConst(0)))
指示代码生成器在生成的代码中创建一个空的可变长度字符串。然后,您可以更改此字符串的长度,而无需将字符串显式定义为可变大小。例如:
function out = varSizeStringExample3(n) s = string(blanks(coder.ignoreConst(0))); for i = 1:n s = s + ":) "; end out = s; end