找回密码
 注册
Simdroid-非首页
查看: 128|回复: 3

要写一个mexw32文件,matlab传递来的如何字符串在mexw32文件里如何读取

[复制链接]
发表于 2009-10-25 21:42:22 | 显示全部楼层 |阅读模式 来自 广东深圳
本帖最后由 ljelly 于 2009-10-26 18:44 编辑

要用c语言写一个mexw32文件,从matlab传递来的参数,如果是实数,可以用mxGetPr()来,但是现在要从matlab传递来一个字符串(这里是文件名),请问各位高手怎么写?
发表于 2009-10-27 13:00:33 | 显示全部楼层 来自 天津
Simdroid开发平台
本帖最后由 junziyang 于 2009-10-27 13:04 编辑

碰巧我以前有个程序用过传递字符串。用的是mxGetString。下面是我程序中的片段,可能对你有帮助。
注意:如果传递的字符串中包含中文的话,mxGetNumberOfElements获取的字符串长度会有问题,所以最好不要用中文名称(路径或者文件名..)

!---- 将字符串内容复制给本地变量 ------------------------------------------------------------------
IF (mxIsChar(prhs(57)) /= 1) THEN
        CALL mexErrMsgTxt('Savedir must be a string.')
ENDIF
strlen = mxGetNumberOfElements(prhs(57))
IF (strlen > 150) THEN
        CALL mexErrMsgTxt('Length of savedir must be less than 150.')
ENDIF
status = mxGetString(prhs(57),savedir,150) !savedir 是传入的路径名称-字符串
IF (status /= 0) THEN                                 
        CALL mexErrMsgTxt('Failed to create savedir')
ENDIF

我用的是Fortran90,C语言没用过应该与此差不多。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-10-27 17:56:39 | 显示全部楼层 来自 广西贵港

  1. char *FigureName;
  2. int  LengthOfChar;
  3. LengthOfChar = 2 * (mxGetM(prhs[0]) * mxGetN(prhs[0])) + 1;
  4.         FigureName   = (char*)mxCalloc(LengthOfChar, sizeof(char));
  5.     mxGetString(prhs[0], FigureName, LengthOfChar);
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-29 00:06:04 | 显示全部楼层 来自 广东深圳
解决了,我用的meArrayToString(),这个函数不必知道字符串的长度,简单好用。但是还是谢谢各位的帮助!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-28 07:26 , Processed in 0.044896 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表