Matlab 在 Mex 文件中打开 fopen 时崩溃

Matlab Crahes upon fopen in Mex File

我对 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 命令处崩溃。

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

亲切的问候

菲利普

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

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

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

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