从 C 获取 MATLAB 变量(字符串)

发布于 2024-08-29 16:06:08 字数 444 浏览 4 评论 0原文

我正在编写一个启动 Matlab 脚本(.m 文件)的小型 C 应用程序。 我需要交换一些变量,但我不知道如何获取 Matlab 中存在的字符数组。

我正在做这样的事情:

enter code here
result = engGetVariable(ep,"X");
if (!result)
    {
    printf ("Error...");
            exit -1;
    }

int n = mxGetN(result);

    char *varx = NULL;
    memcpy(varx, mxGetData(result),n*sizeof(char));

它不起作用。有人知道如何用 C 语言获取 Matlab 字符串吗? 我已经阅读了有关 engGetVariable() 的 Matlab 文档和提供的示例,但这些都让我明白了。

I'm writing a small C application that launchs a Matlab script (.m file).
I need to exchange some variables and I don't know how to get an array of chars that exists in Matlab.

I'm doing something like this:

enter code here
result = engGetVariable(ep,"X");
if (!result)
    {
    printf ("Error...");
            exit -1;
    }

int n = mxGetN(result);

    char *varx = NULL;
    memcpy(varx, mxGetData(result),n*sizeof(char));

It doesn't work. Does someone know how to get a Matlab string in C?
I've read Matlab documentation about engGetVariable() and the provided example but any of this things clarify me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

‖放下 2024-09-05 16:06:08

你的问题是你试图 memcpy 到你从未分配的内存中。
char *varx = malloc (sizeof(char) *bytes_you_need);在你这样做之前。将 char * 设置为 NULL 意味着它没有内存地址,因此不能作为对任何内存的引用......将其设置为 malloc 的返回值,其中 malloc 为您的数据留出了一些字节。

char *varx = malloc (sizeof(char) * n);
memcpy(varx, mxGetData(result),n*sizeof(char));
printf ("%s\n", varx);
free(varx);

Your problem is that you're trying to memcpy into memory that you never allocated.
char *varx = malloc (sizeof(char) *bytes_you_need); before you do that. Setting char * to NULL means it has no memory address, and thus cannot serve as a reference to any memory.... set it to the return value of malloc, where malloc has set aside some bytes for your data.

char *varx = malloc (sizeof(char) * n);
memcpy(varx, mxGetData(result),n*sizeof(char));
printf ("%s\n", varx);
free(varx);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文