【问题标题】:Matlab Crahes upon fopen in Mex FileMatlab 在 Mex 文件中的 fopen 崩溃
【发布时间】:2015-06-16 17:31:38
【问题描述】:

我对 Matlab 有一点经验,但对 mex 环境不熟悉。

我要做的是将我计算的一些值保存到我的 C 例程中的 txt 文件中。

为了简单起见,我在这里使用 MathWork 的Create C Source File guide 中的示例 arrayProduct.c 进行详细说明。

我通过以下方式修改了示例代码:

void arrayProduct(double x, double *y, double *z, mwSize n)
{
  mwSize i;

  /* multiply each element y by x */
  FILE *f = NULL;
  f = fopen("log_test.csv", "rb");
  for (i=0; i<n; i++) 
  {
    z[i] = x * y[i];
    fprintf(f, "%g\n", z[i]);
  }
  fclose(f);
}

所以我添加了ffopenfprintffclose命令的声明。 我正在使用 MS Visual Studio C++ 2013 Professional (C) 作为编译器,并且代码编译得很好。 通过取消注释我所有的更改并再次一点一点地引入它们,我能够发现 Matlab 在 fopen 命令处崩溃。

我无法在这里或其他地方找到有用的帮助,因此非常欢迎任何建议。提前非常感谢!

亲切的问候

菲利普

【问题讨论】:

  • Whit 崩溃了,是不是卡住了?
  • 您不应该使用w+ 而不是rw 吗?或者r+....文件log_test.csv是否已经存在?
  • 嘿,不,它完全关闭了。它是 Win7 64bit 上的 Matlab 2015a
  • 为什么对fopen() 的调用没有任何错误检查?
  • @RobertStettler,非常感谢,好像已经这样了!

标签: c matlab fopen mex


【解决方案1】:

使用fopen 时使用w+r+,具体取决于您要对文件执行的操作以及要创建它还是直接打开它。

来自 (http://www.tutorialspoint.com/c_standard_library/c_function_fopen.htm)

  • "r" 打开文件进行读取。该文件必须存在。
  • "w" 创建一个用于写入的空文件。如果已存在同名文件,则删除其内容,并将该文件视为新的空文件。
  • “a”附加到文件。写入操作,在文件末尾追加数据。如果文件不存在,则创建该文件。
  • "r+" 打开文件以更新读取和写入。该文件必须存在。
  • "w+" 为读写创建一个空文件。
  • "a+" 打开一个文件进行读取和追加。

【讨论】:

    【解决方案2】:

    感谢提供帮助的 cmets,尤其是 RobertStettler! 问题出在我打开文件的模式上。它应该是 r+、w+ 或 a+。

    【讨论】:

    • 不客气,我把答案贴得更详细一点,这样你就可以结束话题了。
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2015-10-02
    • 2012-11-05
    相关资源
    最近更新 更多