将数组返回到coder.ceval

将数组返回到coder.ceval,c,matlab,code-generation,C,Matlab,Code Generation,我需要使用y=coder.ceval()从matlab调用一个c函数,并从该函数返回一个字符串。但是,coder.ceval()函数只允许我返回标量值。但是字符串是字符数组,因此无法返回。matlab函数中的代码如下所示: function y = abc(param) y = ''; if strcmp(coder.target,'rtw'), y=coder.ceval('c-function',param); end end 有什么解决方案或解决办法吗 希望得到一些帮

我需要使用
y=coder.ceval()
从matlab调用一个c函数,并从该函数返回一个字符串。但是,
coder.ceval()
函数只允许我返回标量值。但是字符串是字符数组,因此无法返回。matlab函数中的代码如下所示:

function y = abc(param)

 y = '';

 if strcmp(coder.target,'rtw'),

  y=coder.ceval('c-function',param);

 end

end
有什么解决方案或解决办法吗

希望得到一些帮助。多谢各位

编辑

这是一个解决方法,您应该使用它,风险由您自己承担!;) 我是说如果这真的是你最后的选择

由于您没有指定字符串的类型,为了简单起见,我假设它只由大写字母(AABBBCC)组成。 大写字母由两位数字(A=65,Z=90,man ascii)表示为十进制数字

该方法包括两个步骤: 1) 在通过coder.ceval调用的函数中,应根据要返回的字符串构建标量值。2) 必须从标量值重新生成字符串

下面的代码通过一个简单的示例说明了如何执行这两个步骤。请记住,这只是一个例子,你必须努力。例如,假设您需要返回字符串“ABC”,然后可以返回标量“656667”,它由三个2位数字组成:65=A、66=B、67=C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

    int i, len, n;

    // First convert a string in a scalar value
    char str[] = {'A', 'B', 'C', '\0'};

    printf("str = %s\n", str);
    len = strlen(str);


    for (i = 0; i < len; i++) {
        n = str[i] + i*100;
    }
    printf("n = %d\n", n);


    // You return a scalar that is composed by 65,66,67 ---> A,B,C
    int y = 656667;

    char num[100];
    char letter[3];

    // convert the number in a string    
    snprintf(num, 100, "%d", y);
    printf("num = %s\n", num);
    len = strlen(num);
    printf("num len = %d\n", len);
    // here we assume that the number of digits id even only ascii letters
    if ((len%2) != 0) exit(1);

    // Now we have to store the number of two digits as numbers and
    // then convert the to char and finally append tehm to a string
    int *ni = malloc((len/2)*sizeof(int));
    char *string = malloc(len + 1);

    // Here I use a lot of intermediate steps to make it clear
    char c = 0;
    for (i = 0; i < len/2; i+=1) {
        snprintf(letter, 3, "%c%c", num[2*i], num[2*i+1]);
        ni[i] = atoi(letter);
        c = (char)ni[i];
        printf("letter %d = %s, x = %d, c = %c\n", i, letter, ni[i], c);
        string[i] = c;
        printf("string[%d] = %c\n", i, string[i]);
    }

    // print the final string
    string[len] = '\0';
    printf("string = %s\n", string);

    return 0;
}
#包括
#包括
#包括
int main(){
int i,len,n;
//首先转换标量值中的字符串
字符str[]={'A','B','C','\0'};
printf(“str=%s\n”,str);
len=strlen(str);
对于(i=0;ia,B,C组成的标量
int y=656667;
字符数[100];
字符字母[3];
//将数字转换为字符串
snprintf(num,100,“%d”,y);
printf(“num=%s\n”,num);
len=strlen(num);
printf(“num len=%d\n”,len);
//在这里,我们假设数字的数量甚至只有ascii字母
如果((镜头%2)!=0)退出(1);
//现在我们必须将两位数存储为数字和
//然后将字符串转换为char,最后将tehm附加到字符串中
int*ni=malloc((len/2)*sizeof(int));
char*string=malloc(len+1);
//在这里,我使用了许多中间步骤来说明这一点
字符c=0;
对于(i=0;i
小写字母从97开始,然后变成3位数字,但是通过使用一些2位的“特殊数字”,人们甚至可以决定读取字符串开头的2位数字和“特殊数字”后面的3位数字

好的,我不确定这是否会有帮助,但至少,我希望你会觉得有趣