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);
}
所以我添加了f、fopen、fprintf和fclose 命令。
我正在使用 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+" 打开文件进行读取和追加。
我对 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);
}
所以我添加了f、fopen、fprintf和fclose 命令。 我正在使用 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+" 打开文件进行读取和追加。