主要内容

解决错误:字符串不支持 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.varsizes 定义为可变大小,因为 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

另请参阅

主题